集成学习之随机森林

201 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

前面讲了什么是bagging和pasting方法,主要讲了他们可以用于实例的采样。但其实他们也可以对特征进行采样。对特征的抽样可以让预测器有更多的选择,但会提升一点偏差换取更低的方差。

随机补丁和随即子空间

在处理高维输入(如图像)时,我们可以对实例和特征都进行抽样,这样的处理方式称为随机补丁方法。而如果是保留所有的训练实例,只是对特征进行抽样,就被称为随机子空间法

我们可以在之间的BaggingClassifier类中修改几个超参数就可以使用随机子空间法随机补丁方法:如果保留训练实例可以设置 bootstrap=False ,max_samples=1.0 ,开启特征的采集:bootstrap_features=True,max_features<1.0(共取或者取其一)

随机森林

随机森林就是对决策树的集成,通常选择以bagging方法训练。

我们可以使用以下方法直接创建一个随机森林:

from sklearn.ensemble import RandomForestClassifier

RandomForestClassifier(n_estimators=100,max_leaf_nodes=16...)

可以是下面的代码实现一个随机森林:

from sklearn.ensemble import BaggingClassifier

BaggingClassifier(
    DecisionTreeClassifier(splitter="random",max_leaf_nodes=16),n_estimators=100 ...
)

当然使用RandomForestClassifier是经过优化的,同时他拥有基本的BaggingClassifier和DecisionTreeClassifier的超参数。

随机森林在分裂节点时,做的不再是搜索出最好的特征,他会在一个随机生成的特征子集里搜索最好的特征,同样是会导致提高了的偏差但是会降低方差。

比随机森林的更加随机的,不仅是从随机生成的特征子集中寻找特征,而且还给每个特征一个随机的阈值,这样随机的情况下生成的决策树组成的森林叫极端随机数集成

极端随机数集成和随机森林的比较中,我们很难提前预估好坏,所以在测评中可以将两个都用少,使用交叉验证去选择结果更好的一个。

特征重要性

Scikit-Learn在使用随机森林时,会对某个特征在森林里树节点的平均减少不纯度的程度来衡量该特征的重要性。我们可以使用feature_importances_来访问每个特征的重要性。而借助这个,可以让我们快速选出哪些的特比较重要。