集成学习之Boosting
前文介绍的 Bagging 主要通过降低方差的方式减少预测误差,而本文介绍的 Boosting 方法的思想则截然不同,它是通过不断减少偏差来降低误差。在采用 Boosting 方法的众多模型中,本文将会介绍两类常用的模型:AdaBoost 和 GBDT 以及它们的变体 Xgboost 、LightGBM 以及 Catboost 。
(篇幅较长,这里先写到AdaBoost,后面的鸽下)
1 Boosting方法的基本思路
1.1 强可学习和弱可学习
在介绍 Boosting 的思想前,需要先了解强可学习和弱可学习
在概率近似正确学习( PAC Learning )的框架下:
-
弱学习:识别错误率小于 1 / 2 1 / 2 1/2(即准确率仅比随机猜测略高的学习算法)
-
强学习:识别准确率很高并能在多项式时间内完成的学习算法
非常有趣的是,在 PAC 学习的框架下,强可学习和弱可学习是等价的,也就是说一个概念是强可学习的充分必要条件是这个概念是弱可学习的。上面的定理旨在说明弱学习是可以通过不断地学习等方式来提升为强可学习的。
1.2 Boosting的思想
由于弱可学习算法比强可学习算法容易得多,而 Boosting 方法就是从弱学习算法出发,将其提升至强可学习算法,因此问题就转换成如何将弱可学习提升为强可学习。
Boosting 方法的思路是,通过反复学习弱学习算法,得到一系列弱分类器,又称为基本分类器。然后通过一定的形式去组合这些弱分类器构成一个强分类器。整体可分为两个阶段,一是不断地重复学习,二是对不同学习器的组合。
在前一阶段,大多数的 Boosting 方法都是通过改变训练数据集的概率分布(训练数据不同样本的权值),针对不同概率分布的数据调用弱分类算法学习得到一系列的弱分类器。
对于 Boosting 方法来说,有两个问题需要给出答案:第一个是每一轮学习应该如何改变数据的概率分布,第二个是如何将各个弱分类器组合起来。关于这两个问题,不同的 Boosting 算法会有不同的答案,接下来介绍一种最经典的 Boosting 算法 —— Adaboost 。
2 Adaboost算法
对于 Adaboost 来说,解决上述的两个问题的方式是:
-
提高被前一轮分类器错误分类的样本的权重,而降低那些被正确分类的样本的权重。
-
通过采取加权多数表决的方式组合各个弱分类器,具体来说,加大分类错误率低的弱分类器的权重。
2.1 Adaboost的具体流程
假设给定一个二分类的训练数据集: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\} T={ (x1,y1),(x2,y2),⋯,(xN,yN)} ,其中每个样本点由特征与类别组成。
特征 x i ∈ X ⊆ R n x_{i} \in \mathcal{X} \subseteq \mathbf{R}^{n} xi∈X⊆Rn ,类别 y i ∈ Y = { − 1 , + 1 } y_{i} \in \mathcal{Y}=\{-1,+1\} yi∈Y={ −1,+1} , X \mathcal{X} X 是特征空间, Y \mathcal{Y} Y 是类别集合,输出最终分类器 G ( x ) G(x) G(x) 。
Adaboost 具体算法如下:
(1)初始化训练数据的分布: D 1 = ( w 11 , ⋯ , w 1 i , ⋯ , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , ⋯ , N D_{1}=\left(w_{11}, \cdots, w_{1i}, \cdots, w_{1 N}\right), \quad w_{1i}=\dfrac{1}{N}, \quad i=1,2, \cdots, N D1=(w11,⋯,w1i,⋯,w1N),w1i=N1,i=1,2,⋯,N
(2)对于 m = 1 , 2 , ⋯ , M m=1, 2, \cdots, M m=1,2,⋯,M ,开始学习过程
-
使用具有权值分布 D m D_m Dm 的训练数据集进行学习,得到基本分类器: G m ( x ) : X → { − 1 , + 1 } G_{m}(x): \mathcal{X} \rightarrow\{-1,+1\} Gm(x):X→{ −1,+1}
-
计算 G m ( x ) G_m(x) Gm(x) 在训练集上的分类误差率 e m = ∑ i = 1 N P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i