共计 935 个字符,预计需要花费 3 分钟才能阅读完成。
随机森林的介绍在这篇文章中就不多介绍了,核心思想就是双随机过程:随机样本采样和随机特征采样
特征选择下面介绍两种方式
(1)基尼系数
(2)oob(out of bag) Error袋外误差
基尼系数
在决策树中cart树就是使用基尼系数来进行节点划分,在每一个节点划分的时候,计算每一个特征的基尼系数,选择基尼系数较小的特征,基尼系数越小,反应得到的结果集数据越纯,也就是划分的效果比较好,基本上都被正确的分类出来。
介绍了决策树节点划分的基本原理之后,我们是如何来使用基尼系数来计算特征的重要性?
假设我们给出的节点M,当前节点M的基尼系数是可以计算出来的,然后我们选择一个特征J进行划分,划分后的两个子集也有自己的基尼系数,计算划分前和划分后的基尼系数差值作为当前特征的重要性,如果差值越大说明当前的特征重要性越高。就拿特征J来说,如果我们划分后的结果很纯,那么计算出来的基尼系数很小,那么理所当然前后的差值较大,就达到了目的。
计算每一个特征在每一棵树的重要性,然后取加权平均得到最终的特征重要性评估
OOB
首先要了解什么是袋外误差?
袋外的概念就是我们一次对样本进行采样,假设总共有M个样本,一次采样只采集A个样本,那么就有M-A个样本没有被采集到,这些样本就是用来作为测试样本后期衡量决策树的好坏,当然也拿来衡量特征的好坏。
OOB误差究竟怎么用?
第一步:
我们已经把随机森林需要的K颗树全部算出来了,每一棵树都会对对应的袋外数据计算相应的结果,计算的结果与实际的结果之间对比可以得到算法的计算误差,此处我们记为ERROR1
第二步:
我们对每一个特征随机添加一定的噪声(也有另外一种方法,就是将当前特征的值随机打散),对加入噪声的数据再次计算对应的误差得到ERROR2,然后计算ERROR1与ERROR2之间的差值,差值越大,说明当前的特征越重要。为什么重要?你可以这么想,当前我们的特征未加入噪声之前计算的误差比较小,得到的结果比较好,但是你加入了脏数据也就变为不好的数据,那么计算出来的结果就会比较差。相反,本来特征计算的结果效果不好,你加了一点脏数据前后差异理论上也不会差异太大,所以得到的误差差异也就不大。到此就说明了特征的重要性。
结合以上两步就可以通过OOB来计算出特征的重要性了