对提升(以及梯度提升等特定技术)的描述通常会泛泛地谈论“弱学习器”,然后立即转而专门讨论提升树。
为什么是这样?我看过一些关于提升 SVM 的讨论,但很少甚至没有关于提升神经网络或高斯过程的讨论。有没有关于为什么树比其他“学习者”更适合提升的文献?
对提升(以及梯度提升等特定技术)的描述通常会泛泛地谈论“弱学习器”,然后立即转而专门讨论提升树。
为什么是这样?我看过一些关于提升 SVM 的讨论,但很少甚至没有关于提升神经网络或高斯过程的讨论。有没有关于为什么树比其他“学习者”更适合提升的文献?
对于结构未知的新数据挖掘问题,树通常是一个不错的选择。从统计学习的要素第 10.7 节:
“就对学习过程的要求而言,工业和商业数据挖掘应用程序往往特别具有挑战性。数据集的观察次数和测量的变量数量通常非常大。因此,计算方面的考虑起到了重要作用。此外,数据通常是混乱的:输入往往是定量、二元和分类变量的混合,后者通常具有多个级别。通常有很多缺失值,很少有完整的观察值。数字预测变量的分布和响应变量通常是长尾且高度偏斜的……此外,它们通常包含很大一部分严重的错误测量(异常值)。预测变量通常在非常不同的尺度上进行测量。
在数据挖掘应用程序中,通常只有一小部分已包含在分析中的大量预测变量实际上与预测相关。此外,与模式识别等许多应用程序不同,很少有可靠的领域知识来帮助创建特别相关的特征和/或过滤掉不相关的特征,包含这些特征会大大降低许多方法的性能。
此外,数据挖掘应用程序通常需要可解释的模型。仅仅产生预测是不够的。还希望有信息提供对输入变量的联合值与结果预测响应值之间的关系的定性理解。因此,神经网络等黑盒方法在模式识别等纯预测设置中非常有用,但对数据挖掘的用处要小得多。
这些对速度、可解释性和数据混乱性质的要求极大地限制了大多数学习过程作为数据挖掘的现成方法的有用性。“现成”方法是一种可以直接应用于数据的方法,无需大量耗时的数据预处理或仔细调整学习过程。
在所有众所周知的学习方法中,决策树最接近满足作为数据挖掘的现成程序的要求。它们的构建速度相对较快,并且可以生成可解释的模型(如果树很小)。正如第 9.2 节中所讨论的,它们自然地包含了数字和分类预测变量和缺失值的混合。它们在各个预测变量的(严格单调)变换下是不变的。因此,缩放和/或更一般的转换不是问题,它们不受预测异常值的影响。他们执行内部特征选择作为过程的一个组成部分。因此,即使不是完全免疫,它们也能抵抗包含许多不相关的预测变量。
树有一个方面阻止它们成为预测学习的理想工具,即不准确性。它们很少能提供与手头数据所能达到的最佳水平相媲美的预测准确性。如第 10.1 节所示,提升决策树通常会显着提高其准确性。同时,它保留了数据挖掘所需的大部分特性。通过提升牺牲的树的一些优势是速度、可解释性,以及对于 AdaBoost 而言,对重叠类分布的鲁棒性,尤其是训练数据的错误标记。梯度提升模型 (GBM) 是树提升的推广,它试图缓解这些问题,从而为数据挖掘提供准确有效的现成程序。”
抱歉,引用很长,但我认为它解释了他们只寻址树的理由/借口。他们继续推导出使用树的 Boosting 算法,解释他们必须找到哪些参数才能使其工作,在我在其他地方看到的称为“函数空间”的上下文中定义最速下降(f = {f(x 1 ), f(x 2 ), ... f(x N )}),解释了如何将它们在集成中的下一个分类器约束到与最速下降“方向”具有相似输出的树上,比仅仅添加最速下降更能概括直接函数(某种正则化正在进行?),然后定义一个算法。
但是他们忽略了一个事实,即我们经常希望在纯预测的背景下使用 Boosting。很高兴我们在使用树的 GradientBoosting 时看到了如此惊人的性能提升,但是我们习惯于 Boosting 能够处理的其他弱学习器呢?
没有原则性的理由不能用其他一些低偏差、高方差的学习器(如小型神经网络)来代替决策树。它肯定会改变步骤 2.b。和 2.c。他们的算法10.3。它也可能会更改步骤 1 的初始化。但它可以完成!不过,我不确定文献中是否存在任何常见或流行的算法。当我寻找他们时,我遇到了你的问题。可能是树更容易训练并且作为一个整体具有可证明的低风险,以至于没有人期望其他任何东西能够做得更好?
确实如此。Boosting 是为弱学习者设计的,这意味着模型只比随机猜测好一点,因为它允许你结合所有这些不同的弱模型,这些模型擅长对特定的例子进行分类,但对其他的则很差。换句话说,它们是不相关的(我敢打赌,这是你在文章中看到的另一个词。相信我,我去过那里)。
然而,神经网络绝对不会很弱。实际情况往往非常强大,但这确实取决于您正在使用的数据及其结构。我实际上正在从事一个项目,我正在使用具有重要时间结构的数据来提升前馈网络。我在我的特征向量中包含了一些时间滞后,并希望提升能够处理其余的问题。
其他人所说的弱学习器是首选是 100% 正确的,但树或 GAM 对提升有用的核心原因是,通过提升它们,您可以获得更复杂的模型。这是由于模型的分区/局部性。一个简单的线性回归很弱,但提升它不会做太多,因为输出仍然是一个简单的线性回归,可能系数略有不同。现在,如果您添加二进制分割并增强简单的线性回归,那么您将获得更复杂的模型。
首先,我看到最近使用了很多增强型 GAM。所以至少有一些变化。例如这里和插入符号中的 gamboost。
其次,这里似乎没有强调的一点是基础学习者应该很快。在 boosting 中,您希望依次适应成百上千的学习者,因此每次适应都需要快速。这将是高斯过程和大型神经网络很少被提升的一个重要原因。