R中的随机子空间方法

Posted

技术标签:

【中文标题】R中的随机子空间方法【英文标题】:Random Subspace Method in R 【发布时间】:2020-01-25 23:02:45 【问题描述】:

关于如何实现 R 中 (Ho,1998) 所描述的“随机子空间方法”(一种集成方法)的任何想法? 找不到包裹

何天锦 (1998)。 “The Random Subspace Method for Constructing Decision Forests”。 IEEE 模式分析和机器智能汇刊。 20 (8): 832–844。

【问题讨论】:

欢迎来到 SO;如果答案解决了您的问题,请接受它(请参阅What should I do when someone answers my question?) - 谢谢(相关包似乎 存在的事实不会使问题未解决 - 在任何情况下,SO 不是关于软件位置) 【参考方案1】:

实际上,这已“集成”(某种程度)到随机森林 (RF) 算法中 - 实际上是由标准 R 包 randomForest 中的 mtry 参数控制的特征的随机选择;有关更多详细信息,请参阅Wikipedia entry on RF 以及 SO 线程 Why is Random Forest with a single tree much better than a Decision Tree classifier? 中的答案(免责声明:我的)。

虽然在 RF 的 scikit-learn 实现中复制上述算法的确切行为既简单又直接(只需设置 bootstrap=False - 请参阅上面的链接线程),我承认我想不出一种方法来获得randomForest R 包中的相同行为 - 即“强制”它不使用引导采样,这将使其等同于随机子空间方法;我在randomForest function 中尝试过replace=FALSEsampsize=nrow(x) 的组合,但它似乎不起作用...

总而言之,这里的信息(可以说是在 R 或其他框架中没有具体实现该方法的原因)是,很可能你最好还是坚持使用随机森林;如果您确实想尝试一下,AFAIK 唯一的选择似乎是 Python 和 scikit-learn。

【讨论】:

原始 RSM 仅在树构造开始时选择一个子集。其实作者说的是:“如果树内的子空间发生变化,也就是每次分裂时选择不同的特征维度,就可以构造出更多不同的树”algorithm section 我想一种在 R 中实现 RSM 的方法可以通过一个通用的 ensemble 函数来实现,我可以只提供一些模型。【参考方案2】:

caret 包中找到了这个函数:

model<-bag(x=iris[,-5], y=iris[,5], vars = 2, 
bagControl = bagControl(fit = ctreeBag$fit,
                        predict = ctreeBag$pred,
                        aggregate = ctreeBag$aggregate), 
trControl=trainControl(method = 'none'))

它支持 vars 属性,因此您可以为每个学习者考虑随机变量子集;同时可以通过传递 method = 'none' 作为参数来避免引导采样。

【讨论】:

以上是关于R中的随机子空间方法的主要内容,如果未能解决你的问题,请参考以下文章

初学python第十天的随堂笔记

10-四个基本子空间

集成学习与随机森林随机森林与随机子空间

向量空间列空间零空间可解性

数学-线性代数-#6 线性代数-#6 向量空间列空间R^n与子空间

Pandas 数据框中的随机行选择