关于随机森林进行多分类的一个思考

机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别输出的类别的众树而定,它有着许多的有点,能很好地处理多分类问题。

基本算法

  1. 原始训练集为N,应用bootstrap法有放回的随机抽取k个新的自助样本集,并由构建k棵决策树。每次未被抽到的样本组成了k个袋外数据;
  2. 设有M个变量,在每一棵树的每个节点处随机抽取m(m<M)个变量,从m中选择一个最具有分辨能力的变量,变量的阈值通过检查每一个分类点确定。
  3. 每棵树最大限度的生长,不做任何修剪(普通的决策树算法需要剪枝)。
  4. 将生成的多棵分类树组成随机森林,用随机森林分类器对新的数据进行判断与分类,其分类结果按决策树分类器的投票决定。

优点

  1. 对于很多种资料,它可以产生高准确度的分类器。
  2. 它可以处理大量的输入变量。
  3. 可以在决定类别时,评估变量的重要性。
  4. 它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度。
  5. 它提供一个实验方法,可以去侦测variable interactions。
  6. 对于不平衡的分类资料集来说,它可以平衡误差。
  7. 它计算各例中的近亲度,对于数据挖掘、侦测偏离者(outlier)和将资料视觉化非常有用。
  8. 它可以延伸应用在未标记的资料上,即使用非监督式聚类方法。也可以侦测偏离者和观看资料。
  9. 学习过程速度很快。
  10. 能够处理很高维度的数据,并且不用做特征选择。
  11. 创建随机森林的时候,对generlization error使用的是无偏估计。
  12. 容易扩展到并行方法

缺点

  1. 在某些噪音较大的分类或回归问题上会过拟合
  2. 对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,也就是说随机森林在这种数据上产生的属性权值是不可信的。

简要描述

随机森林,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵之间是没有关联的,在得到森林之后,当有一个新的输入样本进入的时候,让森林中的每一棵决策树分别进行判断,对其进行分类,最后预测为被选择的最多的那一类。
建立决策树的过程中,需要注意两点:采样与完全分裂。首先是两个随机采样的过程,random forest对输入的数据进行行列的采样;这里的采样,可能存在重复的样本。假设有N个样本,那么采样的样本也为N个,在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现over-fitting。然后进行列采样,从M个feature中选择m(m<M)个,之后就是对采样后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面所有的样本都指向同一个分类。 一般很多的决策树算法都有一个很重要的步骤-剪枝,这里不需要这样做,因为之前的两个随机采样的过程保证了随机性,就算不减枝,也不会出现over-fitting。

需要注意的是: 每一棵决策树相对是较弱的,但是将多棵决策树结合起来就十分强大。可以这样比喻随机森林算法:每一棵决策树就是一个精通某一个窄领域的专家(从M个feature中选择m个让每一棵决策树进行学习),这样在随机森林中就有很多个精通不同领域的专家,对一个新的输入数据,可以从不同的角度去分析,最终由各方面的专家进行投票,得到最终结果。

 

RF、XGB、GBDT、LigthGBM 对缺失值的敏感性;

RF:不敏感,它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度

XGB:不敏感,算法中对缺失值进行了处理,对缺失特征值分裂时,左右节点都分裂,最终看哪个损失更小就分到哪边,所以对缺失值不敏感

GBDT:对缺失值没有对应处理,敏感

ligthGBM: 不敏感,和Xgboost是一样的。每次分割的时候,分别把缺失值放在左右两边各计算一次,然后比较两种情况的增益,择优录取

 

随机森林做多分类:

自己的理解:

多分类:根据基尼系数最小的分裂原则,看叶子节点中,占比最高的是哪一个类别就分为哪个类别,最后多棵树的分类结果进行投票 (或许有误)

回归:均方误差损失最小化原则,就是叶子节点的均值作为回归值,最终多棵树再次求平均

 

 

关于XGBOOST多分类 : 回归或者二分类,每次迭代训练一棵树。多分类,基于one vs all的方式训练多棵。

多分类问题会对每个类别生成一棵树,而分类或者回归,每次迭代生成一棵树,最后使用加法模型加权求和得到最终的结果。预测时一样,用加法模型计算最终的结果。

 

 

RF和GBDT的区别

相同点:

  • 都是由多棵树组成,最终的结果都是由多棵树一起决定。

不同点:

  • 集成学习:RF属于bagging思想,而GBDT是boosting思想
  • 偏差-方差权衡:RF不断的降低模型的方差,而GBDT不断的降低模型的偏差
  • 训练样本:RF每次迭代的样本是从全部训练集中有放回抽样形成的,而GBDT每次使用全部样本
  • 并行性:RF的树可以并行生成,而GBDT只能顺序生成(需要等上一棵树完全生成)
  • 最终结果:RF最终是多棵树进行多数表决(回归问题是取平均),而GBDT是加权融合
  • 数据敏感性:RF对异常值不敏感,而GBDT对异常值比较敏感
  • 泛化能力:RF不易过拟合,而GBDT容易过拟合

 

高频知识点

  • XGB与GBDT、随机森林等模型相比,有什么优缺点?
  • XGB为什么可以并行训练?
  • XGB用二阶泰勒展开的优势在哪?
  • XGB为了防止过拟合,进行了哪些设计?
  • XGB如何处理缺失值?
  • XGB如何分裂一个结点?如何选择特征?
  • XGB中一颗树停止生长的条件有哪些?
  • XGB叶子结点的权重有什么含义?如何计算?
  • 训练一个XGB模型,经历了哪些过程?调参步骤是什么?
  • XGB如何给特征评分?
知识点: 珍藏版 | 20道XGBoost面试题

参考:https://wustchuichui.github.io/2016/04/06/Random-forest/

posted @ 2020-11-18 12:27  静悟生慧  阅读(3352)  评论(0编辑  收藏  举报