随机森林为啥不会过度拟合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机森林为啥不会过度拟合相关的知识,希望对你有一定的参考价值。

来源:知乎

谢宇杰

大型机软件工程师
不是不会过拟合,而是在满足一定的条件下不容易过拟合。特征参数要足够多,特征参数之间相关性尽量低。
知乎用户

Breiman的这句话完全错误,根本没有不过拟合的学习方法!
对于随机森林来说: 在有躁音的情况下(注意,现实世界应用中躁音不能忽略),树太少很容易过拟合,增加树可以减小过拟合,但没有办法完全消除过拟合,无论你怎么增加树都不行。

------------------
随机森林
决策树主要流行的算法有ID3算法,C4.5算法、CART算法,主要花费时间在建决策树和剪枝过程中,但一旦建成决策树,由于他是树形结构能够直观的显示出模型,而且在后期的分类过程中也比较容易分类,但决策树有一些不好的地方,比如容易过拟合。为了减少决策树的不足,近年来又提出了许多模型组和+决策树的算法,这些算法都是生成N棵决策树,虽然这N棵树都很简单,但是它们综合起来就很强大了,有点类似与adaboost算法。
随机森林主要思想是先对原始样本随机选出N 个训练子集用于随机生成N颗决策树,针对每个样本集在构建决策树的选择最优属性进行划分时是随机选择m个属性,而不是像常用的决策树将所有的属性参与选择,再由这些决策树构成一个森林,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类,然后看看哪一类被选择最多,就预测这个样本为那一类。
随机森林算法三个步骤:
(1)为每棵决策树抽样产生训练集
随机森林算法采用Bagging抽样技术从原始训练集中产生N 个训练子集(假设要随机生成N颗决策树),每个训练子集的大小约为原始训练集的三分之二,每次抽样均为随机且放回抽样,这样使得训练子集中的样本存在一定的重复,这样做的目的是为了在训练的时候,每一棵树的输入样本都不是全部的样本,使森林中的决策树不至于产生局部最优解。
(2)构建决策树
为每一个训练子集分别建立一棵决策树,生成N棵决策树从而形成森林,每棵决策树不需要剪枝处理。
由于随机森林在进行节点分裂时,随机地选择某m个属性(一般是随机抽取指定logM +1个随机特征变量,m<<M)参与比较,而不是像决策树将所有的属性都参与属性指标的计算。为了使每棵决策树之间的相关性减少,同时提升每棵决策树的分类精度,从而达到节点分裂的随机性。
(3)森林的形成
随机森林算法最终的输出结果根据随机构建的N棵决策子树将对某测试样本进行分类,将每棵子树的结果汇总,在所得到的结果中哪个类别较多就认为该样本是那个类别。
由于上面两个随机采样(从原始训练集中随机产生N个训练子集用于随机生成N颗决策树和在针对每个样本集构建决策树过程中随机地选择m个属性)的过程保证了随机性,所以不会出现过拟合over-fitting。随机森林中的每一棵数分类的能力都很弱,但是多棵树组合起来就变的NB,因为每棵树都精通某一方面的分类,多棵树组成一个精通不同领域的决策专家。
随机森林优缺点
优点:
1、随机森林可以处理高维数据,并确定变量的重要性,是一个不错的降维方法;
2、对数据缺失,随机森林也能较好地保持精确性;
3、当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法;
缺点:
1、随机森林算法可以解决回归问题,但是由于不能输出一个连续型值和作出超越训练集数据范围的预测,导致在对某些噪声的数据进行建模时出现过度拟合;
2、随机森林算法类似于黑盒子,由于几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。
参考技术A 来源:知乎
谢宇杰
大型机软件工程师
不是不会过拟合,而是在满足一定的条件下不容易过拟合。特征参数要足够多,特征参数之间相关性尽量低。
知乎用户
Breiman的这句话完全错误,根本没有不过拟合的学习方法!
对于随机森林来说:
在有躁音的情况下(注意,现实世界应用中躁音不能忽略),树太少很容易过拟合,增加树可以减小过拟合,但没有办法完全消除过拟合,无论你怎么增加树都不行。
------------------
随机森林
决策树主要流行的算法有ID3算法,C4.5算法、CART算法,主要花费时间在建决策树和剪枝过程中,但一旦建成决策树,由于他是树形结构能够直观的显示出模型,而且在后期的分类过程中也比较容易分类,但决策树有一些不好的地方,比如容易过拟合。为了减少决策树的不足,近年来又提出了许多模型组和+决策树的算法,这些算法都是生成N棵决策树,虽然这N棵树都很简单,但是它们综合起来就很强大了,有点类似与adaboost算法。
随机森林主要思想是先对原始样本随机选出N
个训练子集用于随机生成N颗决策树,针对每个样本集在构建决策树的选择最优属性进行划分时是随机选择m个属性,而不是像常用的决策树将所有的属性参与选择,再由这些决策树构成一个森林,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类,然后看看哪一类被选择最多,就预测这个样本为那一类。
随机森林算法三个步骤:
(1)为每棵决策树抽样产生训练集
随机森林算法采用Bagging抽样技术从原始训练集中产生N
个训练子集(假设要随机生成N颗决策树),每个训练子集的大小约为原始训练集的三分之二,每次抽样均为随机且放回抽样,这样使得训练子集中的样本存在一定的重复,这样做的目的是为了在训练的时候,每一棵树的输入样本都不是全部的样本,使森林中的决策树不至于产生局部最优解。
(2)构建决策树
为每一个训练子集分别建立一棵决策树,生成N棵决策树从而形成森林,每棵决策树不需要剪枝处理。
由于随机森林在进行节点分裂时,随机地选择某m个属性(一般是随机抽取指定logM
+1个随机特征变量,m<<M)参与比较,而不是像决策树将所有的属性都参与属性指标的计算。为了使每棵决策树之间的相关性减少,同时提升每棵决策树的分类精度,从而达到节点分裂的随机性。
(3)森林的形成
随机森林算法最终的输出结果根据随机构建的N棵决策子树将对某测试样本进行分类,将每棵子树的结果汇总,在所得到的结果中哪个类别较多就认为该样本是那个类别。
由于上面两个随机采样(从原始训练集中随机产生N个训练子集用于随机生成N颗决策树和在针对每个样本集构建决策树过程中随机地选择m个属性)的过程保证了随机性,所以不会出现过拟合over-fitting。随机森林中的每一棵数分类的能力都很弱,但是多棵树组合起来就变的NB,因为每棵树都精通某一方面的分类,多棵树组成一个精通不同领域的决策专家。
随机森林优缺点
优点:
1、随机森林可以处理高维数据,并确定变量的重要性,是一个不错的降维方法;
2、对数据缺失,随机森林也能较好地保持精确性;
3、当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法;
缺点:
1、随机森林算法可以解决回归问题,但是由于不能输出一个连续型值和作出超越训练集数据范围的预测,导致在对某些噪声的数据进行建模时出现过度拟合;
2、随机森林算法类似于黑盒子,由于几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。

梯度提升与随机森林

【中文标题】梯度提升与随机森林【英文标题】:Gradient Boosting vs Random forest 【发布时间】:2018-02-21 17:20:42 【问题描述】:

据我了解,RF 随机选择特征,因此很难过拟合。但是,在 sklearn 中,梯度提升还提供了 max_features 选项,这有助于防止过度拟合。那么,为什么有人会使用随机森林呢? 谁能根据给定的数据解释何时使用?

非常感谢任何帮助。

【问题讨论】:

你的问题有点像说“汽车在路上行驶,但船在水中行驶得很快。为什么有人会用船在路上行驶?”当然,随机森林有某些类型的数据问题,它非常适合。这是一种监督学习方法,当您拥有许多特征并希望每个特征都在模型中发挥潜在作用而不必担心偏差时,这种方法非常有用。 @TimBiegeleisen 不同之处在于很容易识别何时使用船和何时使用汽车。何时使用随机森林与何时使用梯度提升并不总是那么清楚。有几个复杂的梯度提升库(lightgbm、xgboost 和 catboost)对于大多数类型的问题可能会优于随机森林。识别表明随机森林何时可能表现更好的问题特征是一个很好的问题。我当然没有答案。 我投票决定将此问题作为题外话结束,因为它与machine learning, rather than software development 有关。您可以在Cross Validated 或DataScience.SE 上提出这些问题。 【参考方案1】:

根据我的个人经验,随机森林可能是一个更好的选择......

    您在小型数据集上训练模型。 您的数据集几乎没有要学习的特征。 您的数据集的 Y 标志计数较低,或者您尝试预测发生概率低或很少发生的情况。

在这些情况下,像 XGBoost 和 Light GBM 这样的梯度提升算法可能会过拟合(尽管它们的参数是经过调整的),而像随机森林甚至逻辑回归这样的简单算法可能会表现得更好。为了说明,对于 XGboost 和 Ligh GBM,与随机森林相比,测试集的 ROC AUC 可能更高,但与训练集的 ROC AUC 差异太大。

尽管 Gradient Boosting 算法具有敏锐的预测能力,但在某些情况下,随机森林利用了乞求方法(随机选择)的模型稳定性,并优于 XGBoost 和 Light GBM。但是,Gradient Boosting 算法在一般情况下表现更好。

【讨论】:

【参考方案2】:

Quora 上的类似问题: https://www.quora.com/How-do-random-forests-and-boosted-decision-trees-compare

我同意链接中作者的观点,即随机森林更健壮——它们不需要太多针对特定问题的调整即可获得良好的结果。除此之外,根据我自己的经验,还有一些其他项目:

随机森林在小数据集上表现更好;梯度提升树需要大量数据 随机森林更容易解释和理解。这可能看起来很愚蠢,但如果需要由技术较少的人使用,可以更好地采用模型

【讨论】:

我不认为随机森林更容易解释或理解,至少对于最终模型而言。训练过程稍微容易一些,但两者的最终模型是相同的,都是决策树的(加权)总和。【参考方案3】:

我认为这也是正确的。我也读过这个页面How Random Forest Works 那里解释了随机森林的优点。像这样:

    对于分类问题的应用,随机森林算法 将避免过拟合问题 对于分类和 回归任务,可以使用同样的随机森林算法 随机森林算法可用于识别最 训练数据集中的重要特征,换句话说, 特征工程。

【讨论】:

以上是关于随机森林为啥不会过度拟合的主要内容,如果未能解决你的问题,请参考以下文章

使用 sklearn 和随机森林显示过度拟合

如何使用随机森林对不平衡类进行分类以避免过度拟合

为啥在使用 PCA 减少后拟合随机森林模型时性能会受到影响?

在给定特征数量的情况下找到随机森林的最大深度

梯度提升与随机森林

Python数据挖掘—分类—随机森林