前言
在深度学习火起来之前,提升方法(包括AdaBoost, GBDT)是kaggle等比赛中的利器,所以提升方法是必备的知识点。李航《统计学习方法》第8章——提升方法主要内容:AdaBoost, Boosting Tree, GBDT。写本文章主要目的是复习(毕竟之前看纸质版做的笔记), 对于证明比较跳跃和勘误的地方我都做了注解,以便初学者快速阅读理解不会卡住。
本文原文将书上所有证明给出,由于CSDN的公式编辑器公式支持不全,有些公式没法正常显示,欢迎点击此处查看原文, 个人技术博客:SnailDove
文章目录
正文
提升(boosting) 方法是一种常用的统计学习方法, 应用广泛且 有效。 在分类问题中, 它通过改变训练样本的权重, 学习多个分类 器, 并将这些分类器进行线性组合, 提高分类的性能。
本章主要内容
- 提升方法的思路和代表性的提升算法AdaBoost; 通过训练误差分析探讨AdaBoost为什么能够提高学习精度; 并且从 前向分步加法模型的角度解释AdaBoost;
- 然后叙述提升方法更具体的 实例——提升树(boosting tree)和GBDT 。
8.1 提升方法AdaBoost算法
8.1.1 提升方法的基本思路
提升方法的思想
对于一个复杂任务来说, 将多个专 家的判断进行适当的综合所得出的判断, 要比其中任何一个专家单独 的判断好。 实际上, 就是“三个臭皮匠顶个诸葛亮”的道理
历史背景
历史上, Kearns和Valiant首先提出了**“强可学习(strongly learnable) ”和“弱可学习(weakly learnable) ”的概念。 指出: 在概率近似正确(probably approximately correct, PAC) 学习的框架中, 一 个概念(一个类) , 如果存在一个多项式的学习算法能够学习它, 并 且正确率很高, 那么就称这个概念是强可学习的**; 一个概念, 如果存 在一个多项式的学习算法能够学习它, 学习的正确率仅比随机猜测略 好, 那么就称这个概念是弱可学习的。 非常有趣的是Schapire后来证 明强可学习与弱可学习是等价的, 也就是说, 在PAC学习的框架下, 一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
这样一来, 问题便成为, 在学习中, 如果已经发现了“弱学习算 法”, 那么能否将它提升(boost) 为“强学习算法”。 大家知道, 发现 弱学习算法通常要比发现强学习算法容易得多。 那么如何具体实施提 升, 便成为开发提升方法时所要解决的问题。 关于提升方法的研究很 多, 有很多算法被提出。 最具代表性的是AdaBoost算法(AdaBoost algorithm) 。
对于分类问题而言, 给定一个训练样本集, 求比较粗糙的分类规 则(弱分类器) 要比求精确的分类规则(强分类器) 容易得多。提升方法就是从弱学习算法出发, 反复学习, 得到一系列弱分类器(又称 为基本分类器) , 然后组合这些弱分类器, 构成一个强分类器。
大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分 布) , 针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
提升方法的核心问题和思想
对提升方法来说, 有两个问题需要回答: 一是在每一轮如 何改变训练数据的权值或概率分布; 二是如何将弱分类器组合成一个强分类器。
- 关于第1个问题, AdaBoost的做法是提高那些被前一轮弱分类器错误分类样本的权值, 而降低那些被正确分类样本的权值。 这样一来, 那些没有得到正确分类的数据, 由于其权值的加大而受到后一轮的弱分类器的更大关注。 于是, 分类问题被一系列的弱分类器“分而治之”。
- 至于第2个问题, 即弱分类器的组合, AdaBoost采取加权多数表决的方法。 具体地, 加大分类误差率小的弱分类器的权值, 使其在表决中起较大的作用, 减小分类误差率大的弱分类器的权值, 使其在表决中起较小的作用。 AdaBoost的巧妙之处就在于它将这些想法自然且有效地实现在一 种算法里。
8.1.2 AdaBoost算法