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=FALSE
和sampsize=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中的随机子空间方法的主要内容,如果未能解决你的问题,请参考以下文章