解释:
前面介绍过决策树算法,决策树算法对数据比较敏感,方差比较大,而之前提过的Bagging算法想让方差较大,最后用投票或平均值来减少最后模型的方差。随机森林就是通过集成学习的思想将多棵树集成的一种算法。
其实从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想。
优点:
- 能够处理具有高维特征的输入样本,而且不需要降维
- 能够有效地运行在大数据集上
- 能够评估各个特征在分类问题上的重要性
- 在生成过程中,能够获取到内部生成误差的一种无偏估计对于缺省值问题也能够获得很好得结果
森林中的每棵树是怎么生成的呢?
每棵树的按照如下规则生成:
1)如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本(这种采样方式称为bootstrap sample方法),作为该树的训练集;
从这里我们可以知道:每棵树的训练集都是不同的,而且里面包含重复的训练样本(理解这点很重要)。
随机森林最后分类取决于多棵树(弱分类器)的投票表决,这种表决应该是"求同",因此使用完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的,这样无异于是"盲人摸象"。
2)如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;(看你用基尼系数还是信息增益率了)
3)每棵树都尽最大程度的生长,并且没有剪枝过程
。
样本与特征随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)
随机森林分类效果(错误率):
1)森林中任意两棵树的相关性:相关性越大,错误率越大;
2)森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。
3)减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。
如何选择对应的m?
这个选择子特征的个数的经验值一般是原特征个数的平方根(分类问题)或原特征个数的三分之一(回归问题),要解决这个问题主要依据计算袋外错误率oob error(out-of-bag error)
袋外错误率(oob error )
随机森林有一个重要的优点就是,没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。
- 步骤:
1)对每个样本,计算它作为oob样本的树对它的分类情况(约1/3的树);
2)然后以简单多数投票作为该样本的分类结果;
3)最后用误分个数占样本总数的比率作为随机森林的oob误分率。
过程:
随机森林一开始采用自助法Bootstrap抽取数据(样本随机性)
对于每棵树,在待分裂的节点上,随机选择K个特征(特征随机性)
每一棵树为CART
基于随机森林的特征选择(只是借随机森林筛选一下特征,跟随机森林本身有区别):
对于线性模型来说,特征的重要性由的分量体现出来,越大,说明特征越重要(指的是相对其它特征)。但非线性模型则困难得多。
而随机森林可以用特殊的方法得出特征的重要性。基本原理是:如果特征比较重要,如果往这个特征上塞入一些噪声,模型的表现肯定会变差。如何塞入噪声呢? 加入服从均匀分布或高斯分布的随机值?这样有个小问题,就是原始的数据可能不服从这样的分布,加入噪声后,原始的分布可能被改变。
- 在特征重要性的基础上,特征选择的步骤如下:
1)计算每个特征的重要性,并按降序排序
2)确定要剔除的比例,依据特征重要性剔除相应比例的特征,得到一个新的特征集
3)用新的特征集重复上述过程,直到剩下m个特征(m为提前设定的值)
4)根据上述过程中得到的各个特征集和特征集对应的袋外误差率,选择袋外误差率最低的特征集
- 特征重要性的计算步骤:
1)对每一颗决策树,选择相应的袋外数据(out of bag,OOB)计算袋外数据误差,记为
2)所谓袋外数据是指,每次建立决策树时,通过重复抽样得到一个数据用于训练决策树,这时还有大约1/3的数据没有被利用,没有参与决策树的建立。这部分数据可以用于对决策树的性能进行评估,计算模型的预测错误率,称为袋外数据误差。
3)随机对袋外数据OOB所有样本的特征X加入噪声干扰(可以随机改变样本在特征X处的值),再次计算袋外数据误差,记为
4)假设森林中有N棵树,则特征X的重要性=,这个数值之所以能够说明特征的重要性是因为,如果加入随机噪声后,袋外数据准确率大幅度下降(即上升),说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。
比较决策树和随机森林:
决策树做分支的时候,考虑的是所有的属性。而随机森林分支的时候是对随机选出的属性做分类。
决策树的构建方式: 从原始K个特征中,每一个特征都找到当前特征的最优分割点。然后基于最优分割点,找到最优的分割属性。
为什么随机森林的树深度往往大于 GBDT 的树深度?
对于 Bagging 算法来说,由于我们会并行地训练很多不同的分类器的目的就是降低这个方差(variance),因为采用了相互独立的基分类器多了以后,h 的值自然就会靠近。所以对于每个基分类器来说,目标就是如何降低这个偏差(bias),所以我们会采用深度很深甚至不剪枝的决策树。
对于 Boosting 来说,每一步我们都会在上一轮的基础上更加拟合原数据,所以可以保证偏差(bias),所以对于每个基分类器来说,问题就在于如何选择 variance 更小的分类器,即更简单的分类器,所以我们选择了深度很浅的决策树。