随机森林是bagging方法的一种具体实现。它会训练多棵决策树,然后将这些结果融合在一起就是最终的结果。随机森林可以用于分裂,也可以用于回归。主要在于决策树类型的选取,根据具体的任务选择具体类别的决策树。

对于分类问题,一个测试样本会送到每一颗决策树中进行预测,然后投票,得票最多的类为最终的分类结果;

对与回归问题,随机森林的预测结果是所有决策树输出的均值。

随机森林的随机性主要体现在两个地方:

1、在训练的时候,采用bootstrap方法对样本是有放回的抽样,每次都使用一部分样本去训练;

2、在决策树内部结点分裂时候,每一个结点都在所有特征里面随机选择在一部分特征,然后在这些特征里面选择最优分裂点。

包外误差 

随机森林每次训练一棵决策树的时候,采用的都是部分的数据。所以,剩下没有使用的样本就可以用来做验证集。有一点像交叉验证的感觉。

对于分类问题,包外误差就是被错分的包外样本除以总的包外样本数

对于回归问题,就是所有包外样本的回归误差和除以包外样本数

特征重要性

随机森林还可以计算特征的重要性。经常也会用随机森林来做特征选择。这里用置换样本特征值(也可以添加噪声)以后的OOB(也就是包外的数据)误差的增加量来判断一个特征的重要性。因为,如果某个特征很重要的话,那么改变样本该特征的值对样本的预测结果就有很大的影响。如果特征不重要,改变特征对样本的预测结果也不会有很大的影响。下面为单棵决策树的误差增加量:

机器学习算法随机森林图解 随机森林算法应用_决策树

, n1为原特征值下分类/预测正确的包外样本数,n2为改边特征值以后分类/预测正确的包外样本数

最后取所有数的平均值就得到了特征的重要性

随机森林的优点

  1. 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合,但是对于小数据集还是有可能过拟合,所以还是要注意;
  2. 两个随机性的引入,使得随机森林具有很好的抗噪能力;
  3. 它能够处理很高维的数据,并且不用做特征选择,对数据集的适应能力强。既能处理离散性数据,也能处理连续型数据,数据集无需规范化;
  4. 在创建随机森林的时候,对generalization error使用的是无偏估计;
  5. 训练速度快,可以得到变量重要性排序(两种:基于OOB误分率的增加量和基于分裂是的gini下降量);
  6. 在训练过程中,能够检测到feature间的互影响;
  7. 容易做成并行化方法;
  8. 实现比较简单

随机森林的缺点:

  1. 对于小数据集和低维的数据效果可能不是很好。
  2. 整个模型为黑盒,没有很强的解释性。
  3. 由于随机森林的两个随机性,导致运行结果不稳定。