[稍后编辑-改写所有内容]
树的种类
浅树是一棵小树(大多数情况下它的深度很小)。一棵成熟的树是一棵大树(大多数情况下它的深度很大)。
假设您有一组看起来像非线性结构的训练数据。
偏差方差分解作为一种查看学习误差的方法
考虑到偏差方差分解,我们知道学习误差有 3 个组成部分:
Err=Bias2+Var+ϵ
偏差是拟合模型在无法表示真实函数时产生的误差;它通常与欠拟合有关。
Var是拟合模型由于采样数据而产生的误差,它描述了如果训练数据发生变化,模型的不稳定程度;它通常与过度拟合有关。
ϵ是包围真实函数的不可约误差;这是学不来的
![模型复杂度](https://onlinecourses.science.psu.edu/stat857/sites/onlinecourses.science.psu.edu.stat857/files/lesson04/model_complexity.png)
考虑到我们的浅树,我们可以说模型具有低方差,因为改变样本不会对模型造成太大的改变。它需要太多更改的数据点才能被认为是不稳定的。同时我们可以说它有很大的偏差,因为它真的不能代表真正模型的正弦函数。我们也可以说它的复杂度很低。它可以用 3 个常数和 3 个区域来描述。
因此,完全成长的树具有低偏差。它非常复杂,因为它只能使用许多区域和这些区域上的许多常数来描述。这就是它具有低偏差的原因。模型的复杂性也会影响高方差。至少在某些区域,以不同方式采样的单个点可以改变拟合树的形状。
作为一般经验法则,当模型具有低偏差时,它也具有高方差,而当它具有低方差时,它具有高偏差。这并非总是如此,但它经常发生。直觉上是一个正确的想法。原因是,当您靠近样本中的点时,您会学习模式,但也会从样本中学习错误,当您远离样本时,您反而非常稳定,因为您没有合并样本中的错误。
我们如何使用这些树来构建合奏?
装袋
bagging 背后的统计模型基于 bootstrapping,这是一种用于评估统计数据误差的统计程序。假设您有一个样本并且您想要评估统计估计的误差,自举过程允许您近似估计量的分布。但是树只是样本“将空间分割成区域并用平均值预测,一个统计量”的简单函数。因此,如果从 bootstrap 样本构建多棵树并对其进行平均,则可以将这些树视为 iid,并且相同的原理可以减少方差。因为 bagging 允许在不影响太多偏差的情况下减少方差。为什么需要全深度树?嗯,这是一个简单的原因,乍一看可能并不那么明显。它需要具有高方差的分类器来减少它。此过程不影响偏差。如果基础模型具有低方差高偏差,则套袋将略微减少已经很小的方差并且不会产生任何偏差。
提升
如何提升?许多人将提升与模型平均进行比较,但这种比较是有缺陷的。提升的想法是集成是一个迭代过程。确实,分类的最终规则看起来像是一些弱模型的加权平均值,但关键是这些模型是迭代构建的。与 bagging 及其工作方式无关。任何k 树是使用从所有先前学习的信息构建的 k−1树木。所以我们最初有一个适合数据的弱分类器,其中所有点都具有相同的重要性。这种重要性可以通过 adaboost 中的权重或梯度提升中的残差来改变,这并不重要。下一个弱分类器不会以相同的方式处理所有点,但那些先前分类正确的重要性小于那些分类错误的重要性。结果是模型丰富了它的复杂性,它能够重现更复杂的表面。这是因为它减少了偏差,因为它可以更接近数据。背后也有类似的直觉:如果分类器的偏差已经很低,那么当我提升它时会发生什么?可能是一个难以忍受的过度拟合,仅此而已。
哪一个更好?
没有明确的赢家。它过于依赖数据集和其他参数。例如装袋不会受伤。可能没用 ut 通常不会影响性能。Boosting 会导致过拟合。那是因为您最终可能会离数据太近。
很多文献都说,当不可约误差很高时,bagging 会好很多,boosting 不会进步太多。
我们可以减少方差和偏差吗?
纯粹的 bootstrap 和 bagging 方法只有一个目的。要么减少方差要么减少偏差。然而,现代实现改变了这些方法的工作方式。采样可用于提升,它似乎也有助于减少方差。有一些装袋程序需要一些想法,例如 Breiman 发布的迭代装袋(或自适应装袋)。所以,答案是肯定的,是可能的。
我们可以使用除树之外的其他学习器吗?
当然。通常你会看到使用这种方法的提升。我也阅读了一些关于 bagging svm 或其他学习者的论文。我尝试自己打包一些 svm,但没有取得多大成功。树是首选方式,但是,出于一个非常简单的原因,它们易于构建、易于适应且易于控制其效果。我个人的观点是,并不是所有关于树木集合的说法。
PS:关于弱分类器数量的最后说明:这完全取决于数据集的复杂性和学习器的复杂性。没有食谱。通常,其中 20 个就足以获取大部分信息,而额外的仅用于微调。