已知树模型是高方差,低偏差模型。结果,他们倾向于过度拟合训练数据。如果我们重新概述树模型的作用,如果我们不修剪它或引入早期停止标准,如每个叶节点的最小实例数,那么这是很吸引人的。好吧,它尝试沿着要素分割数据,直到实例纯粹关于目标要素的值,没有剩余数据,或者没有剩余的要素来吐出数据集。如果以上之一成立,我们会生成一个叶节点。结果是树模型生长到最大深度,并且试图尽可能精确地重塑训练数据,这很容易导致过度拟合。像(ID3或CART)这样的经典树模型的另一个缺点是它们相对不稳定。
例如,考虑使用分类缩放的特征* A *作为“根节点特征”的情况。接下来,此功能将从子树中不再存在的数据集中替换。现在想象一下我们替换数据集中的单行的情况,这种变化导致现在特征* B *分别具有最大信息增益或方差减少的情况。那是什么意思?好吧,功能* B *现在优于功能* A *作为“根节点功能”,这导致完全不同的树,因为我们已经更改了数据集中的单个实例。这种情况不仅可能发生在根节点,也可能发生在树的所有内部节点。
随机森林方法基于两个概念,称为装袋和子空间采样。Bagging是* bootstrap聚合*的简短形式。在这里,我们创建了大量数据集,其长度与从原始数据集中取出的原始数据集相同(包装中的* bootstrap *)。然后,我们为每个自举数据集训练一个树模型,并将这些模型的多数预测作为我们的预测(套袋中的*聚合*)用于看不见的查询实例。这里我们采用回归树模型的均值或中位数以及分类树模型的模式。
你可能会问我们为什么要用替换样品来抽样?好吧,让我们假设我们的原始数据集有100个实例(行),我们想要创建一个由10棵树组成的随机森林模型,其中每棵树都在与原始数据集相同长度的数据集上进行训练。如果我们现在从原始数据集中抽取100个样本而不进行替换,会发生什么?确切地说,没有什么,因为我们比喻说简单地将数据集从一个容器转移到另一个容器。如果我们这样做10次并在每个数据集上训练一个树模型,我们将获得完全相同数据集的10倍(假设相同的模型参数)。如果我们现在预测一个看不见的查询实例并对10个树模型的结果进行平均,即运行随机森林程序,我们就没有任何好处。这让我们回到最初的问题,为什么我们使用套袋方法?我们使用套袋方法(记住重新采样),因为我们知道单个树模型对数据的变化非常敏感并且具有很大的差异。为解决此问题,我们在不同组合的数据集上创建多个模型,并获取其预测的平均值。在这里,我们应用这样的原则:平均多个模型的方差可以减少方差。
暂无数据