森林随机抽样中的选定特征

时间:2019-07-04 14:02:07

标签: machine-learning scikit-learn random-forest

我试图弄清楚分类问题中每个子采样中正在考虑哪些特征,为此,我假设在构建每一个子样本时都会考虑长度为max_features的特征的随机子集树。

我对此感兴趣,因为我为问题使用了两种不同类型的特征,因此我想确保在每棵树中,每种节点拆分都使用两种类型的特征。因此,至少使每棵树考虑所有特征的一种方法是将max_features参数设置为None。所以这里的一个问题是:

是否意味着每个节点拆分都同时考虑两种类型的功能?

从上一个问题得出的另一个是:

由于随机森林对每棵树都进行了子采样,所以这种子采样是在案例(行)还是列(特征)之间进行的吗?此外,可以通过行组而不是随机行来进行二次采样吗?

此外,在max_featuresDecision Trees上都不使用random forest参数中的所有功能似乎不是一个很好的假设,因为它与整点相反。根据树木之间的相关性定义random forest的定义(我不太确定这句话)。

有人知道这是可以在源代码中进行修改的东西,还是至少可以以不同的方式进行修改?

任何建议或评论都非常受欢迎。

随时纠正任何假设。

在源代码中,我一直在阅读有关此内容的信息,但是找不到在何处定义它。

到目前为止已检查的源代码:

splitter.py code from decision tree

forest.py code from random forest

1 个答案:

答案 0 :(得分:2)

  

这是否意味着每个节点拆分都同时考虑两种类型的功能?

鉴于您已正确指出,将max_features设置为None确实会迫使算法在每个分组中考虑所有个功能,目前尚不清楚您到底是什么在这里问:all表示全部,并且从算法的角度来看,特征没有不同的“类型”。

  

由于随机森林对每棵树都进行了子采样,所以这种子采样是在案例(行)还是列(特征)之间进行的?

两者。但是,对于行而言,它并不是精确的二次采样,实际上是bootstrap sampling,即对进行替换采样,这意味着在每个样本中,某些行将丢失,而其他行将丢失。多次出现。

随机森林实际上是两个独立概念的组合:装袋和特征的随机选择。后者实质上对应于“列子采样”,而前者包括我刚刚描述的引导采样。

  

此外,可以通过行组而不是随机行来进行二次采样吗?

AFAIK否,至少在标准实现中(包括scikit-learn)。

  

有人知道这是可以在源代码中进行修改的东西,还是至少可以以不同的方式进行修改?

从字面上看,所有内容都可以在源代码中进行修改;现在,如果真的有必要(甚至是个好主意)这样做,那就另当别论了……

  

此外,使用max_features参数中的所有功能似乎并不是一个好的假设

实际上并没有,因为这正是将RF与简单的装袋方法(bootstrap aggregating的缩写)区别开来的特征。实验确实表明,在每个步骤中添加这些随机选择的功能可以提高与简单套袋相关的性能。

尽管您的问题(和问题)听起来很模糊,但我的建议是“坐下来放松一下”,让(足够强大的)RF算法来处理您的数据...