1、什么是随机森林?
随机森林就是用随机的方式建立一个森林,在森林里有很多决策树组成,并且每一棵决策树之间是没有关联的。当有一个新样本的时候,我们让森林的每一棵决策树分别进行判断,看看这个样本属于哪一类,然后用投票的方式,哪一类被选择的多,作为最终的分类结果。在回归问题中,随机森林输出所有决策树输出的平均值。
(1)随机森林既可以用于分类,也可以用于回归。
(2)它是一种降维手段,用于处理缺失值和异常值。
(3)它是集成学习的重要方法。
2、两个随机抽取
(1)样本有放回随机抽取固定数目
(2)构建决策树时,特征随机抽取
解释:两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)
3、随机森林算法是如何工作的?
在随机森林中,每一个决策树“种植”和“生长”的四个步骤:
(1)假设我们设定训练集中的样本个数为N,然后通过有放回的重复多次抽样获得这N个样本,这样的抽样结果将作为我们生成一颗决策树的训练集;
(2)如果有M个输入变量,每个节点都将随机选择m(m<M)个变量
(3)每棵决策树都最大可能地进行生长而不进行剪枝;
(4)通过对所有的决策树进行加总来预测新的数据(在分类时采用多数投票,在回归时采用平均)。
4、随机森林的优缺点
优点:
(1)在分类和回归都表现良好
(2)对高维数据的处理能力强,可以处理成千上万的输入变量,是一个非常不错的降维方法
(3)能够输出特征的重要程度
(4)有效的处理缺省值
5、重要参数
随机森林分类效果(错误率)与两个因素有关:
(1)森林中任意两棵树的相关性:相关性越大,错误率越大;
(2)森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。
减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。在学习如何选择参数前首先介绍oob的概念。
6、oob:袋外错误率
为了选择最优的m,这里需要利用的是袋外错误率oob(out-of-bag error)。我们知道,在构建每个决策树的时候,采用的是随机有放回的抽取,所以对于每棵树来说,都有一些样本(约占1/3)实际上没有参与树的生成,所以这些样本成为袋外样本,即oob。与交叉验证类似,我们可以将这个决策树的obb样本作为这棵树的验证集,对oob集合进行估计的步骤入下:
(1)对每个样本,计算它作为oob样本的树对它的分类情况
(2)多数投票作为该样本的分类结果
(3)用误分个数占样本总数的比率作为随机森林的oob误分率
oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证。所以没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。
当我们知道了oob的计算方法,我们可以通过选取不同的m,计算oob error,找出oob error最小时对应的m的值。这和交叉验证的思想非常的相似。
7、RF特征重要性的度量方法
(1)对于每一棵决策树,计算其oob error_0
(2)选取一个特征,随机对特征加入噪声干扰,再次计算oob error_1
(3)特征的重要性=∑(oob error_1-oob error_0)/随机森林中决策树的个数
(4)对随机森林中的特征变量按照特征重要性降序排序。
(5)然后重复以上步骤,直到选出m个特征。
解释:用这个公式来度量特征重要性,原因是:给某个特征随机的加入噪声后,如果oob error增大,说明这个特征对样本分类的结果影响比较大,说明重要程度比较高。
8、RF特征选择
首先特征选择的目标有两个:
1:找到与分类结果高度相关的特征变量。
2:选择出数目较少的特征变量并且能够充分的预测应变量的结果。
特征选择的步骤:
(1)对于每一棵决策树,计算其oob error
(2)随机的修改OOB中的每个特征xi的值,计算oob error_2,再次计算重要性
(3)按照特征的重要性排序,然后剔除后面不重要的特征
(4)然后重复以上步骤,直到选出m个特征。
9、几个问题
(1)为什么要随机抽取样本?
答:如果不进行随机抽样,对于每个树的训练集都是相同的,训练出来的结果也是一样的,所以此时进行投票决策没有意义。
(2)为什么要有放回的去抽样呢?
答:如果不是有放回的抽样,那么每一棵树的训练样本是不同的,都是没有交集的,那么每棵树都是有偏的,都是片面的,树与树之间并不是完全公平的。我们需要的是,没颗决策树是公平的,然后让它们投票决策得出结果,并且这样可以防止过度拟合。
(3)这里指的有放回的抽样,是每次抽一个放回,还是一次抽n个再放回?
答: 构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。
(4)随机森林为什么可以用于处理缺失值和异常值?
(5)随机森林为什么不容易过拟合,为什么对噪声不敏感?