机器学习技法笔记-Lecture 10 Random forest

上一节的决策树是一种aggregation model。这里开始讲 aggregation of aggregation。

RF就是使用bagging的方式把一堆树合起来。

之前讲过bagging能够减少算法的variance,而对决策树来说,data不同的话,切得点就会变,比较容易受data影响,variance大。

 

每次使用bootstrap抽样,然后将data送去训练一棵树。过程进行T次,最后对T个g做uniform.

RF很容易实现并行化,DT本身效率也比较高,因此RF也很高效。

RF也继承了cart的优点,同时减弱了cart容易过拟合的弱点。

 

RF增加随机性的另外一个方式是对feature的随机选择。

在每次做branch的时候,只随机选取资料的某些维特征,送进去做branch。这种降维能够创造更多diversity的树,并且降低了运算复杂度。

上述方式再延伸一下,我们可以将特征做一个变换(或者说投影)后再做branch.

 

out-of-bag example  OOB

bootstrap N'次都没有抽中的那些样本称为OOB。每次bootstrap结束,都有差不多1/3的样本没有被抽中。

这些没有被用于训练某个g的资料可以用来做validation. 当然是来做G的validation而不是g. 在validation中调控G中需要的参数。

对每一个样本点,它是一些g的oob,定义这个样本对应的G-为那些g的平均。那么就有n个这样的G-。

然后有了G在oob上的error定义 

 

通过Eoob来做模型选择,在RF上衡量G的表现通常非常准确。

 

 

利用RF来做特征选择

特征选择:去掉冗余的或者无关的特征。

虽然去掉特征很好,但是能不能很好地去掉希望去掉的特征,是一个问题。

决策树在branch的时候选择在哪一维上怎么切,其实也是一个build-in的特征选择过程。

 

使用特征的重要度来做特征选择,在线性模型下可以用权重w来直观的反映出特征的重要度。在非线性中则比较困难。

RF虽然是非线性的 ,但却是一个好的特征选择方式。

 

怎么用RF来衡量一个特征的重要性呢?我们注意都在树的分裂中,是根据某一维来做分裂的。如果打乱所有样本点在这一维度的数据值,再去做一个RF,两个G的表现差异就能衡量这个特征的重要性。

这种打乱某一维度数据的方式叫做permutation.

按照上面说的,在原始数据D和打乱某一维度后的数据D(p)上,我们是要训练两次来得到对应的G和G(p)的,然后再比较它俩的Eoob。

这里有一个近似的方式,省去了重新在D(p)上求一个新的G的过程。就是只对G,在oob和经过permutate的oob上计算Eoob,也能反映特征i的重要度。

 

RF的整个过程中有两处是和random有关的。一个是bootstrap过程,一个是随机选择某些特征送去branch的过程。

那么这个随机也可能影响后续Eval、Eoob或者说Eout的结果。为了减弱这种随机的影响,建议用更多的tree。

posted @ 2017-06-20 17:07  Akane  阅读(227)  评论(0编辑  收藏  举报