推荐一篇写的很好的博客:[Machine Learning & Algorithm] 随机森林(Random Forest).

一、随机森林算法的原理

随机森林算法是Bagging集成框架下的一种算法。它同时对训练数据和特征采用随机抽样的方式来构建更加多样化的基模型。随机森林具体的算法步骤如下:

  1. 随机抽样训练决策树。假如有N个样本,则有放回的随机选择N个样本(每次随机选择一个样本,然后返回继续选择,也就是说可能有重复的)。这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本。
  2. 在每个节点随机选取所有特征的一个子集,用来计算最佳分裂方式。当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m<<M。然后从这m个属性中采用某种策略(比如信息增益)来选择1个属性作为该节点的分裂属性。
  3. 决策树形成过程中每个节点都要按照步骤2来分裂(也就是说如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该结点已经达到了叶子节点,无须继续分裂了)。一直到不能分裂为止。注意整个决策树形成过程中没有进行剪枝。
  4. 按照步骤1-3建立大量的决策树,这样就构成了随机森林。

二、随机森林的随机性体现在哪里?

随机森林的随机性体现在每棵树的训练样本都是随机的,树中每个节点的分裂属性集合也是随机选择确定的。

三、随机森林算法的优缺点?

优点:
–特征和数据的随机抽样–

  1. 它可以处理很高维度的数据,并且不用降维,无需做特征选择;
  2. 如果有很大一部分的特征遗失,仍可以维持准确度;
  3. 不容易过拟合;
  4. 对于不平均的数据集来说,它可以平衡误差;
  5. 可以判断出不同特征之间的互相影响;
    –树模型特性–
  6. 它可以判断特征的重要程度;
    –算法结构–
  7. 训练速度比较快;
  8. 实现起来比较简单。

缺点:

1.随机森林已经被证明在某些噪音比较大的分类或回归问题上会过拟合。(决策树的学习本质上进行的是决策节点的分裂,依赖于训练数据的空间分布)

2.对于有不同取值的属性数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。

四、随机森林为什么不能用全样本取训练m棵决策树?

随机森林的基学习器是同构的,如果用全样本去训练m棵决策树的话,基模型之间的多样性减少,互相相关的程度增加,不能够有效起到减少方差的作用,对于模型的泛化能力是有害的。随机森林思想就是取一组高方差、低偏差的决策树,并将它们转换成低方差、低偏差的新模型。

五、随机森林和GBDT的区别?

  1. 随机森林采用的是Bagging的思想,而GBDT采用的是Boosting的思想;
  2. 组成随机森林的树可以并行生成,而GBDT只能是串行生成;
  3. 随机森林对异常值不敏感,而GBDT对异常值非常敏感;
  4. 随机森林对训练集一视同仁,而GBDT对训练集中预测错误的样本给予了更多的关注;
  5. 随机森林是通过减少模型方差提高性能,而GBDT是通过减少模型偏差提高性能;
  6. 对于最终的输出结果而言,随机森林采用多数投票方法,而GBDT则是将所有结果累加或加权累加起来;
  7. 组成随机森林的树可以是分类树,也可以说回归树,而GBDT只能由回归树组成。

本文涉及很多集成学习的思想,可以参考这篇:集成学习(Ensemble learning)面试高频题.