Boosting体现了提升的思想:
区别一:数据方面
区别二:集成策略
区别三:学习顺序
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练出不同的基分类器,构成一个更强的强分类器。
基本思想如下:
1、计算样本的权重
2、计算基学习器的错误率
3、计算基学习器的权重
1、初始化训练样本权重相等,训练第一个基学习器
2、根据新的权重的样本集训练第二个基学习器
3、迭代训练:在前一个基学习器的基础上,根据新的样本权重训练当前的学习器
4、直至训练出m个基学习器
具体公式如下:
H ( x ) = sign ( ∑ i = 1 m α i h i ( x ) ) H(x)=\operatorname{sign}(\sum_{i=1}^m\alpha_ih_i(x)) H(x)=sign(i=1∑mαihi(x))
公式中,α 为模型的权重,输出结果大于 0 则归为正类,小于 0 则归为负类。
模型权重计算公式:
α t = 1 2 ln ( 1 − ε t ε t ) \alpha_t=\frac{1}{2}\ln(\frac{1-\varepsilon_t}{\varepsilon_t}) αt=21ln(εt1−εt)
样本权重计算公式:
D t + 1 ( x ) = D t ( x ) Z t ∗ { e − α t , 预测值 = 真实值 e α t , 预测值 ≠ 真实值 D_{t+1}(x)=\frac{D_{t}(x)}{Z_{t}} *\left\{\begin{array}{ll} e^{-\alpha_{t}}, & \text { 预测值 }=\text { 真实值 } \\ e^{\alpha_{t}}, & \text { 预测值 } \neq \text { 真实值 } \end{array}\right. Dt+1(x)=ZtDt(x)∗{e−αt,eαt, 预测值 = 真实值 预测值 = 真实值
Zt 为归一化值(所有样本权重的总和),Dt 为样本权重,αt 为模型权重。
下面为训练数数据,假设弱分类器由 x 产生,其阈值 v 使该分类器在训练数据集上的分类误差率最低,试用 Adaboost 算法学习一个强分类器。
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
假设我们用决策树作为基学习器:
1、初始化样本的的权重,每一个样本的权重为:0.1
2、构建第一个基学习器:
1、寻找最优分裂点
2、计算模型权重
α 1 = 1 2 ln ( 1 − 0.3 0.3 ) = 0.4236 \alpha_1 = \frac{1}{2}\ln(\frac{1-0.3}{0.3})=0.4236 α1=21ln(0.31−0.3)=0.4236
3、更新样本权重
4、由此可得基学习器为:
5、样本更新权重为:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
w | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.1667 | 0.1667 | 0.1667 | 0.07143 |
y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
1、寻找最优分裂点
2、计算模型权重
α 2 = 1 2 ⋅ ln ( 1 − 0.21429 0.21429 ) = 0.64963 \alpha_2 = \frac{1}{2}\cdot\ln(\frac{1-0.21429}{0.21429})=0.64963 α2=21⋅ln(0.214291−0.21429)=0.64963
3、更新样本权重
4、由此可得基学习器为:
5、样本更新权重为:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
w | 0.0455 | 0.0455 | 0.0455 | 0.16667 | 0.16667 | 0.16667 | 0.1061 | 0.1061 | 0.1061 | 0.0455 |
y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
1、寻找最优分裂点:通过调整特征权重以后,发现目标值为-1的特征值权重占比较大,说明目标值为-1的样本容易分错,建立第三棵树时重点关注分错特征值。
2、计算模型权重
α 3 = 1 2 ⋅ ln ( 1 − 0.182 0.182 ) = 0.7514 \alpha_3 = \frac{1}{2}\cdot\ln(\frac{1-0.182}{0.182})=0.7514 α3=21⋅ln(0.1821−0.182)=0.7514
3、更新样本权重
4、由此可得基学习器为:
5、样本更新权重为:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
w | 0.12497 | 0.12497 | 0.12497 | 0.06484 | 0.06484 | 0.06484 | 0.06484 | 0.06484 | 0.06484 | 0.12497 |
y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
依次迭代更新到n棵树:
假设:我们只构建 3 棵决策树,此时我们的模型如下:
此时得到强学习器:
H ( x ) = sign ( 0.4236 ∗ h 1 ( x ) + 0.64963 ∗ h 2 ( x ) + 0.7514 ∗ h 3 ( x ) ) \mathrm{H}(x)=\operatorname{sign}\left(0.4236* h_{1}(x) + 0.64963* h_{2}(x) + 0.7514 * h_{3}(x)\right) H(x)=sign(0.4236∗h1(x)+0.64963∗h2(x)+0.7514∗h3(x))
取样本6为例:
概念:
GBDT 的全称是 Gradient Boosting Decision Tree,梯度提升决策树,简称梯度提升树。
提升树的基本思想去拟合残差。
案例分析:
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | 5.56 | 5.70 | 5.91 | 6.40 | 6.80 | 7.05 | 8.90 | 8.70 | 9.00 | 9.05 |
1、计算训练数据的最优切分点,及平方损失
切分点 | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
---|---|---|---|---|---|---|---|---|---|
平方误差 | 15.72 | 12.07 | 8.36 | 5.78 | 3.91 | 1.93 | 8.01 | 11.73 | 15.74 |
计算每一个划分点的平方损失,例如:1.5 的平方损失计算过程为:
R1 为 小于 1.5 的样本个数,样本数量为:1,其输出值为:5.56
R 1 = 5.56 \begin{array}{l} R1 =5.56 \\ \end{array} R1=5.56
R2 为 大于 1.5 的样本个数,样本数量为:9 ,其输出值为:
R 2 = ( 5.7 + 5.91 + 6.4 + 6.8 + 7.05 + 8.9 + 8.7 + 9 + 9.05 ) / 9 = 7.50 \begin{array}{l} R 2=(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05) / 9=7.50 \end{array} R2=(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)/9=7.50
该划分点的平方损失:
L ( 1.5 ) = ( 5.56 − 5.56 ) 2 + [ ( 5.7 − 7.5 ) 2 + ( 5.91 − 7.5 ) 2 + … + ( 9.05 − 7.5 ) 2 ] = 0 + 15.72 = 15.72 L(1.5)=(5.56-5.56)^{2}+\left[(5.7-7.5)^{2}+(5.91-7.5)^{2}+\ldots+(9.05-7.5)^{2}\right]=0+15.72=15.72 L(1.5)=(5.56−5.56)2+[(5.7−7.5)2+(5.91−7.5)2+…+(9.05−7.5)2]=0+15.72=15.72
其他划分点的平方损失同上。
2、当 6.5 作为切分点时,平方损失最小,此时得到第一棵决策树:
该树左子树的输出值为:(5.56 + 5.70 + 5.91 + 6.40 + 6.80 + 7.05) / 6 ≈ 6.24
该树右子树的输出值为:(8.90 + 8.70 + 9.00 + 9.05) / 4 ≈ 8.91
1、残差表如下:
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | 5.56 | 5.70 | 5.91 | 6.40 | 6.80 | 7.05 | 8.90 | 8.70 | 9.00 | 9.05 |
预测值 | 6.24 | 6.24 | 6.24 | 6.24 | 6.24 | 6.24 | 8.91 | 8.91 | 8.91 | 8.91 |
残差 | -0.68 | -0.54 | -0.33 | 0.16 | 0.56 | 0.81 | -0.01 | -0.21 | 0.09 | 0.14 |
2、以残差为目标值,拟合残差,进行二次构建CART树
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | -0.68 | -0.54 | -0.33 | 0.16 | 0.56 | 0.81 | -0.01 | -0.21 | 0.09 | 0.14 |
3、找出最优切分点,计算每一个切分点的平方损失(同过程一计算切分点)
切分点 | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
---|---|---|---|---|---|---|---|---|---|
平方损失 | 1.42 | 1.0 | 0.79 | 1.13 | 1.66 | 1.93 | 1.93 | 1.9 | 1.91 |
4、以3.5为切分点时,平方损失最小,此时得到的二叉决策树为:
该树左子树的输出值为:(-0.68-0.54-0.33) / 3 ≈ 0.52
该树右子树的输出值为:(0.16+0.56+0.81+(-0.01)+(-0.21)+0.09+0.14) / 7 ≈ 0.22
1. 残差表如下:
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | -0.68 | -0.54 | -0.33 | 0.16 | 0.56 | 0.81 | -0.01 | -0.21 | 0.09 | 0.14 |
预测值 | -0.52 | -0.52 | -0.52 | 0.22 | 0.22 | 0.22 | 0.22 | 0.22 | 0.22 | 0.22 |
残差 | -0.16 | -0.02 | 0.21 | -0.06 | 0.34 | 0.57 | -0.23 | -0.43 | -0.13 | -0.08 |
2、以残差为目标值,拟合残差,进行三次构建CART树
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | 0.16 | -0.02 | 0.21 | -0.06 | 0.34 | 0.57 | -0.23 | -0.43 | -0.13 | -0.08 |
3、找出最优切分点,计算每一个切分点的平方损失
切分点 | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
---|---|---|---|---|---|---|---|---|---|
平方损失 | 1.34 | 1.35 | 1.29 | 1.31 | 1.4 | 1.26 | 1.32 | 1.4 | 1.4 |
4、当 6.5 作为切分点时,平方损失最小,此时得到第二棵决策树:
该树左子树的输出值为:(0.16+(-0.02)+0.21+(-0.06)+0.34+0.57) / 6 ≈ 0.15
该树右子树的输出值为:(-0.23-0.43-0.13-0.08) / 4 ≈ -0.22
假设:我们只构建 3 棵决策树,此时我们的模型如下:
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | 5.56 | 5.70 | 5.91 | 6.40 | 6.80 | 7.05 | 8.90 | 8.70 | 9.00 | 9.05 |
预测值 | 5.87 | 5.87 | 5.87 | 6.61 | 6.61 | 6.61 | 8.91 | 8.91 | 8.91 | 8.91 |
模型的总的平方误差为:0.47
(5.56 - 5.87)**2 + (5.70-5.87)**2 + (5.91-5.87)**2 + (6.40-6.61)**2 + (6.80-6.61)**2 + (7.05-6.61)**2 + (8.90-8.91)**2 + (8.70-8.91)**2 + (9-8.91)**2 + (9.05-8.91)**2 = 0.47
如果我们继续构增加基学习器到 6 个,那么平方误差会从 0.47 降低到 0.17。该树模型即为提升树。
梯度提升树的基本思想是拟合负梯度
提升树使用加法模型和前向分布算法实现学习的优化过程。
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | 5.56 | 5.70 | 5.91 | 6.40 | 6.80 | 7.05 | 8.90 | 8.70 | 9.00 | 9.05 |
我们通过计算当模型预测值为何值时,会使得第一个基学习器的平方误差最小,即:求损失函数对 f(xi) 的导数,并令导数为0.
L ( y , f ( x ) ) = 1 2 ∑ i = 1 n ( y i − f ( x i ) ) 2 L(y,f(x))=\frac{1}{2}\sum_{i=1}^n(y_i-f(x_i))^2 L(y,f(x))=21i=1∑n(yi−f(xi))2
∂ L ( y , f ( x i ) ) ∂ f ( x i ) = ∑ i = 1 n ( y − f ( x i ) ) = 0 = > ∑ i = 1 n y i − ∑ i = 1 n f ( x i ) = 0 = > f ( x i ) = ( ∑ i = 1 n y i ) / n \frac{\partial L(y,f(x_i))}{\partial f(x_i)}=\sum_{i=1}^n(y-f(x_i))=0=>\sum_{i=1}^ny_i-\sum_{i=1}^nf(x_i)=0=>f(x_i)=({\sum_{i=1}^ny_i})/ n ∂f(xi)∂L(y,f(xi))=i=1∑n(y−f(xi))=0=>i=1∑nyi−i=1∑nf(xi)=0=>f(xi)=(i=1∑nyi)/n
将样本代入上述公式,此时得到初始化基学习器为:
由于我们拟合的是样本的负梯度,即:
∂ L ( y , f ( x i ) ) ∂ f ( x i ) = f ( x i ) − y i \frac{\partial L(y,f(x_i))}{\partial f(x_i)}= f(x_i)-y_i ∂f(xi)∂L(y,f(xi))=f(xi)−yi
− [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] = y i − f ( x i ) -[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}]= y_i-f(x_i) −[∂f(xi)∂L(y,f(xi))]=yi−f(xi)
1、负梯度表如下:
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | 5.56 | 5.70 | 5.91 | 6.40 | 6.80 | 7.05 | 8.90 | 8.70 | 9.00 | 9.05 |
预测值 | 7.31 | 7.31 | 7.31 | 7.31 | 7.31 | 7.31 | 7.31 | 7.31 | 7.31 | 7.31 |
负梯度 | -1.75 | -1.61 | -1.40 | -0.91 | -0.51 | -0.26 | 1.59 | 1.39 | 1.69 | 1.74 |
切分点 | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
---|---|---|---|---|---|---|---|---|---|
平方损失 | 15.72 | 12.08 | 8.37 | 5.78 | 3.91 | 1.93 | 8.01 | 11.74 | 15.74 |
2、以 6.5 作为切分点损失最小,构建决策树如下:
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | -1.75 | -1.61 | -1.40 | -0.91 | -0.51 | -0.26 | 1.59 | 1.39 | 1.69 | 1.74 |
预测值 | -1.07 | -1.07 | -1.07 | -1.07 | -1.07 | -1.07 | 1.60 | 1.60 | 1.60 | 1.60 |
负梯度 | -0.68 | -0.54 | -0.33 | 0.16 | 0.56 | 0.81 | -0.01 | -0.21 | 0.09 | 0.14 |
切分点 | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
---|---|---|---|---|---|---|---|---|---|
平方损失 | 1.42 | 1.00 | 0.79 | 1.13 | 1.66 | 1.93 | 1.93 | 1.9 | 1.91 |
以 3.5 作为切分点损失最小,构建决策树如下:
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | -0.68 | -0.54 | -0.33 | 0.16 | 0.56 | 0.81 | -0.01 | -0.21 | 0.09 | 0.14 |
预测值 | -0.52 | -0.52 | -0.52 | 0.22 | 0.22 | 0.22 | 0.22 | 0.22 | 0.22 | 0.22 |
负梯度 | -0.16 | -0.02 | 0.19 | -0.06 | 0.34 | 0.59 | -0.23 | -0.43 | -0.13 | -0.08 |
切分点 | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
---|---|---|---|---|---|---|---|---|---|
平方损失 | 0.76 | 0.77 | 0.79 | 0.79 | 0.76 | 0.47 | 0.59 | 0.76 | 0.78 |
以 6.5 作为切分点损失最小,构建决策树如下:
假设:我们只构建 4 棵决策树,此时我们的模型如下:
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
目标值 | 5.56 | 5.70 | 5.91 | 6.40 | 6.80 | 7.05 | 8.90 | 8.70 | 9.00 | 9.05 |
预测值 | 5.87 | 5.87 | 5.87 | 6.61 | 6.61 | 6.61 | 8.91 | 8.91 | 8.91 | 8.91 |
残差:
一个样本真实值与预测值之间的差距。当我们知道损失函数时,残差计算可以用下面的过程来计算:
算法流程:
学习率: