机器学习技法笔记-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。