细说RandomForest

来源:互联网 发布:网站源码可以干什么 编辑:程序博客网 时间:2024/06/02 02:09
鉴于csdn上已经有很多优秀的博文对RandomForest做过介绍,在此重复的内容我就不再复述:如随机森林的Bootstrap,features select...
主要结合原论文谈谈RandomForest的实现细节:

1.out-of-bag的计算:
           对于每一颗树来说,大约有1/3的样本会成为这棵树的out-of-bag,随机森林可以利用这部分数据进行模型检验,也就不需要额外的验证集,同时这也被数学证明是模型泛化误差的无偏估计,那么怎么计算这个oob error呢?
           对于每个样本来说,大约有1/3的树的oob包含它,对这些树对该的分类结果进行多数表决,再将预测结果与真实结果比较,然后就可以得到一个全部数据的分类误差,这个就是oob error

2.特征重要性的计算:
           随机森林可以很方便得给出每个特征的重要性,但是如果特征A和B存在很强的关系,也就是说能从A中推出B,那么这样的特征的重要性是没有意义的,因为随机森林往往只会给A一个很高的值,而B就会小很多(为什么会这样呢?大家以GINI系数为出发点,思考下就可以得出结果)
暂且不论上述的缺点,这也是随机森林一个很独特的地方,这里给出2种计算特征重要性的方法:
方法一:
           还是以一棵树为例,记录OOB中预测正确的样本数N1,然后给特征A加入噪音,再次得到OOB中预测正确的样本数N2,N1-N2就是特征A的row feature importance,当然具体的计算还要考虑一个z-score的标准化。如果特征A是很重要的,那么哪怕一点点的改动都会影响到预测结果。
方法二:
           计算特征A的划分增益,每颗树都可以得到一个值,然后取个平均,这就是基于GINI系数的计算,这种方法比方法一要高效很多。

3.邻近度矩阵:
            样本个数为N,初始化一个N*N的矩阵,如果一个树把A样本和B样本划分到了一个叶节点,则矩阵相对应的元素+1,最后这个N*N矩阵需要归一化,每个元素除以随机森林中树的个数T,这样得到的矩阵是一个对角元素为1的对阵矩阵。矩阵中的元素值越大,则对应的两个样本的相似度越大。


4.缺失值的填充:
           传统的决策树如C4.5处理缺失值是挺复杂的,而RandomForest能很好的处理数值缺失的情况,即使样本中存在大量的缺失(相对的来说比较多)也能获得理想的结果。
RandomForest填充缺失值有两种方式(只针对training set,论文中还探讨了test set的填充方式,在此不做讨论):
第一种方式:
           直接用中位数填充,优点是计算开销小。
第二种方式:
            虽然计算开销大,但是能获得更好的准确度。首先任意填充这些缺失值(初始化一下),这里要用到之前介绍的邻近度矩阵,如果是连续数值的缺失,就进行加权平均填充,如果是类别型特征,就是加权的多票表决填充。然后迭代的进行填充。


5.异常值的检测:
         这也是RandomForest的一个应用,主要基于邻近度矩阵,异常点肯定是和其他样本的相似度都很低的样本,这里对于多分类有一个改进,只比较类内的相似度。

6.对于类别不平衡问题的处理:
       RandomForest也能很好的处理类别不平衡问题,从实现层面来讲,就是给类别设置权重,class weight

补充:其实还有一些没有讲到....大家可以去看一下
原文链接:http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#missing1


0 0
原创粉丝点击