集成算法学习(3)-Boosting(GBDT分类)(举例说明,通俗易懂)

通过前面两贴Bagging、Boosting(AdaBoost)原理与公式推导Boosting(GBDT回归)(举例说明,通俗易懂)对GBDT有了大致了解,这帖就来讲一讲GBDT分类。

GBDT分类是对类别变量进行分类。

还是通过例子了解。

1、案例讲解

总共有 6 个样本,每个样本有三个属性 Likes Popcorn,Age,Favorite Color,对每个样本是否 Loves Troll 2 进行判别。

numLikes PopcornAgeFavorite ColorLoves Troll 2
1Yes12BlueYes
2Yes87GreenYes
3No44BlueNo
4Yes19RedNo
5No32GreenYes
6No14BlueYes

1)初始化 f_0

因为GBDT分类使用的是逻辑函数,逻辑函数的平均值是某一类样本数/另一类样本数(odds)。该例中预测变量 Loves Troll 2 有4个 Yes,2个 No,因此初始叶结点的预测值 f_0=predicted\log(odds)_0=log(4/2)=0.6931=0.7

对于odds的理解,大家可以看一下这篇逻辑回归(含推导)里面有详细的讲解。

就像逻辑回归, log(odds) (范围在0-1)用于分类的最简单方式就是将其转化为概率,在GBDT中叫逻辑方程(Logistic Function)。

                                           predicted_0=p(Yes|x)=\frac{e^{log(odds)_0}}{1+e^{log(odds)_0}}

                                                                                   =\frac{e^{f_0}}{1+e^{f_0}} = \frac{e^{log(4/2)}}{1+e^{log(4/2)}}=0.6667=0.7

因为p(Yes|x)=0.7>0.5,因此可以将所有训练样本预测为yes,即所有人都 Loves Troll 2。

在分类中0.5是常用的阈值,也可以选其他值。

第一次迭代(建第一棵树):

2)计算残差 Residual_0

初始预测值将所有样本都预测为 Yes,但在训练样本中有两个No,因此初始预测值不是很准,此时需要引入伪残差。

Residual_0=(observed -predicted_0)

在逻辑回归中 log(odds)=log(\frac{Yes}{No}) = log(\frac{p(y=1)}{p(y=0)}),因此 Yes 的概率值用 1,No 的概率值用 0 表示,如下表所示:

numLikes PopcornAgeFavorite ColorLoves Troll 2概率Residual_0
1Yes12BlueYes10.3 = 1-0.7
2Yes87GreenYes10.3
3No44BlueNo0-0.7
4Yes19RedNo0-0.7
5No32GreenYes10.3
6No14BlueYes10.3

3)建树,用 Likes Popcorn,Age,Favorite Color 去预测 Residuals,构建的树如下所示:

                                                         

注意:GBDT不论是回归还是分类,叶结点的数量都是有限制的。

4) 对叶结点的值进行转换

类似回归,预测值都是用前面的预测值加上残差预测,但是分类中的预测值是 predicted\log(odds),因此无法直接与残差预测值相加,如下图:

                                                 

如上图所示,预测值 f_0  与第一分支的叶结点值-0.7是无法直接相加的,因此残差需要转换:

                      单个叶结点的残差转换:              \frac{\sum Residual_i}{\sum [previous p(y_i)\times (1-previous p(y_i))]}

\sum Residual_i 这是单个叶结点的所有残差和以及单个叶结点的单个样例的前一个模型的预测值 previous p(y_i)

对于第一个叶结点(从左往右)只有一个值,因此转换后的值 =\frac{-0.7}{0.7\times (1-0.7)}=-3.3

第二个叶结点:\frac{0.3-0.7}{0.7\times (1-0.7)+0.7\times (1-0.7)}=-1

第三个叶结点:\frac{0.3+0.3+0.3}{0.7\times (1-0.7)+0.7\times (1-0.7)+0.7\times (1-0.7)}=1.4

上面就是三个叶结点的输出值。

5)计算预测值(概率)

正常情况下会在决策树前面加一个学习率,学习率正常取0.1,具体原因可以看一下GBDT回归那一帖。

predicted log(odds)_1= f_0+\nu\times TransformedResidual_0\nu 代表学习率

                                    =log(odds)+\nu\times TransformedResidual_0

predicted_1(Yes|x)=\frac{e^{log(odds)_1}}{1+e^{log(odds)_1}}

numLikes PopcornAgeFavorite ColorLoves Troll 2概率Transformed Residual_0

log(odds)_1

\nu=0.8

predicted _1

(概率值)

1Yes12BlueYes11.41.80.9(Yes)
2Yes87GreenYes1-1-0.10.5(Yes)
3No44BlueNo0-1-0.10.5(Yes)
4Yes19RedNo0-3.3-1.94

0.1(No)

5No32GreenYes11.41.80.9(Yes)
6No14BlueYes11.41.8=0.7+0.8*1.40.9= \frac{e^{1.8}}{1+e^{1.8}}

第二次迭代(建第二棵树):

22) 计算残差 Residual_1=(observed-predicted_1)

numLikes PopcornAgeFavorite ColorLoves Troll 2概率

predicted _1

(概率值)

Residual_1

1Yes12BlueYes10.90.1=1-0.9
2Yes87GreenYes10.50.5
3No44BlueNo00.5-0.5
4Yes19RedNo0

0.1

-0.1
5No32GreenYes10.90.1
6No14BlueYes10.9= \frac{e^{1.8}}{1+e^{1.8}}0.1

23)建树

                                           

24) 对叶结点的值进行转换

         第一个叶结点:\frac{-0.5}{0.5\times (1-0.5)}=-2

         第二个叶结点:\frac{0.1-0.1+0.1+0.1}{0.9\times (1-0.9)+0.1\times (1-0.1)+0.9\times (1-0.9)+0.9\times (1-0.9)}=0.6

         第三个叶结点:\frac{0.5}{0.5\times (1-0.5)}=2      

numLikes PopcornAgeFavorite ColorLoves Troll 2概率

Residual_1

TransformedResidual_1
1Yes12BlueYes10.1=1-0.90.6
2Yes87GreenYes10.52
3No44BlueNo0-0.5-2
4Yes19RedNo0-0.10.6
5No32GreenYes10.10.6
6No14BlueYes10.10.6

25)计算预测值(概率)

predicted \log(odds)_2= f_0+\nu\times TransformedResidual_0 +\nu\times TransformedResidual_1

predicted_2(Yes|x)=\frac{e^{predicted \log(odds)_2}}{1+e^{predicted \log(odds)_2}}

numLikes PopcornAgeFavorite ColorLoves Troll 2概率Transformed Residual_0TransformedResidual_1

log(odds)_2

\nu=0.8

predicted _2

(概率值)

1Yes12BlueYes11.40.62.3=0.7+0.8*1.4+0.8*0.60.9= \frac{e^{2.3}}{1+e^{2.3}}
2Yes87GreenYes1-121.50.8
3No44BlueNo0-1-2-1.70.2
4Yes19RedNo0-3.30.6-1.460.2
5No32GreenYes11.40.62.30.9
6No14BlueYes11.40.62.30.9

第三次迭代:

计算残差......

残差会越来越小

2、具体步骤讲解

由上总结GBDT分类的具体步骤如下:

1)

这一步确定样本和损失函数。

n 是样本数量,i 代表第几个样本,x_i 代表属性,y_i 代表观测类别概率值。

GBDT 分类中损失函数主要有  最大似然函数:  \sum_{i=1}^N[y_i\times log(p)+(1-y_i)\times log(1-p)]

p 是 预测概率值。

因为损失函数是对预测值求导,而这里指的预测值是指 log(odds),所以需要将上式转换为 predicted\log(odds) 的损失函数而不是预测概率p的损失函数。

因为上面的是求最大值,因此在前面加个负号,求最小值,如下所示:

L =-\sum_{i=1}^N[y_i\times log(p)+(1-y_i)\times log(1-p)]

   =-\sum_{i=1}^N[observed \times log(p)+(1-observed)\times log(1-p)]

   =\sum_{i=1}^N[-observed \times log(p)-log(1-p)+observed \times log(1-p)]

    =\sum_{i=1}^N[-observed \times( log(p)-log(1-p))-log(1-p) ]

    =\sum_{i=1}^N[-observed \times log \frac{p}{1-p}-log(1-\frac{e^{log(odds)}}{1+e^{log(odds)}}) ]

    =\sum_{i=1}^N[-observed \times log(odds)-log(\frac{1}{1+e^{log(odds)}}) ]

     =\sum_{i=1}^N[-observed \times log(odds)-(log(1)-log(1+e^{log(odds)}) )]

     =\sum_{i=1}^N[-observed \times log(odds)+log(1+e^{log(odds)}) )]

接下来对损失函数微分:

\frac{\partial L}{\partial log(odds)}=\frac{\sum_{i=1}^N[-observed \times log(odds)+log(1+e^{log(odds)})]}{\partial log(odds)}

                    =\sum_{i=1}^N[-observed+\frac{e^{log(odds)}}{1+e^{log(odds)}}]

                    =\sum_{i=1}^N(-observed+p)

2)

这一步得到所有样本的最佳初始 predicted\log(odds)

最小化观测值与预测概率 p 值之间的误差并对predicted\log(odds)微分即可得到观测值的最佳初始predicted\log(odds)

y_i  是观测值,\gamma 是常数 (这里用来代替初始predicted\log(odds)) ,F_{0}(x) 表示初始predicted\log(odds)

          \frac{\partial F_0(x)}{\partial \log(odds)}=\sum_{i=1}^N(-observedprobability+predictedprobability)=0

                                       \sum_{i=1}^N(-observed+p)=0

计算 predicted\log(odds)F_0(x)=\log(odds)= \log\frac{p}{1-p}

3)

这一步,建立M 棵树。

这一步计算所有样本的第 m 棵树的残差。

\frac{\partial L}{\partial F} 是损失函数的导数也叫梯度,F是predicted\log(odds)(上一棵树的predicted\log(odds)),\frac{\partial L}{\partial F}=-observed+p

在 \frac{\partial L}{\partial F} 前面加个负号,这就是负向梯度, -\frac{\partial L}{\partial F}=observed-p,就是上面例子的 Residual,用 r 表示。

r_{im} 代表第 m 棵树第  i 个样本的伪残差(为了区别于线性回归的残差)。

这一步根据 (A) 计算的残差构建树。注意每个叶结点都要有数据,不能为空。

j 代表第 m 棵树的第 j 个结点。

这一步对叶结点的残差值进行转换,跟上面例子中的 24)对叶结点的值进行转换一致。

\gamma_{jm} 表示第 j 个叶结点残差,y_i 表示第 j 个叶结点的观测值,F_{m-1}(x_i) 表示第 j 个叶结点 predicted\log(odds)\gamma 是常数(用来替代第 j 个叶结点的残差转换后的值)。

对于每个结点都有一个最优残差值 \gamma_{jm} 是 第 j 个叶结点的观测值 y_i  与 (第 j 个叶结点predicted\log(odds)F_{m-1}(x_i) +第 j 个叶结点的残差转换值 \gamma) 之间的最小误差。因此通过损失函数对\gamma 微分即可找到每个结点的最优残差转换值 \gamma_{jm}

假设第m棵树第1个叶结点有l个残差,则:

                                                \gamma_{1m}=\arg \min_{\gamma}\sum_{i=1}^N[-y_i \times [F_{m-1}(x_i)+\gamma]+log(1+e^{F_{m-1}(x_i)+\gamma})]

对上面的 \gamma 求导会很繁琐,因此用二阶Taylor Polynomial 近似的代替损失函数。

                             L(y_i,F_{m-1}(x_i)+\gamma)=y_i \times [F_{m-1}(x_i)+\gamma]+log(1+e^{F_{m-1}(x_i)+\gamma})

                              L(y_i,F_{m-1}(x_i)+\gamma)\approx L(y_i,F_{m-i}(x_i))+\frac{\partial (y_1,F_{m-1}(x_1))\gamma}{\partial F()}+\frac{1}{2}\frac{\partial^2 (y_1,F_{m-1}(x_1))\gamma^2}{\partial F()^2}

                         \frac{\partial L(y_i,F_{m-1}(x_i)+\gamma)}{\partial \gamma}\approx 0+\frac{\partial (y_1,F_{m-1}(x_1))}{\partial F()}+\frac{\partial^2 (y_1,F_{m-1}(x_1))\gamma}{\partial F()^2}=0

                                                         \large \gamma=\frac{-\frac{\partial (y_1,F_{m-1}(x_1))}{\partial F()}}{\frac{\partial^2 (y_1,F_{m-1}(x_1))}{\partial F()^2}}

                                                             \large =\frac{observed-p}{\frac{-observed +\frac{e^{log(odds)}}{1+e^{log(odds)}} }{\partial \log(odds)}}

                                                             =\frac{Residual}{-(1+e^{log(odds)})^{-2}\times e^{2log(odds)}+(1+e^{log(odds)})^{-1}\times e^{log(odds)}}

                                                             =\frac{Residual}{\frac{e^{log(odds)}}{(1+e^{log(odds)})(1+e^{log(odds)}) }} =\frac{Residual}{\frac{e^{log(odds)}\times 1}{(1+e^{log(odds)})(1+e^{log(odds)}) }}

                                                             =\frac{Residual}{\frac{e^{log(odds)}}{1+e^{log(odds)}} \times \frac{1}{1+e^{log(odds)}}}

                                                             =\frac{Residual}{p\times (1-p)}

假设第m棵树第1个叶结点有l个残差,则:

                                                      \gamma_{1m}=\sum_{i=1}^l\frac{Residual_i}{p_i\times (1-p_i)}

这一步计算新的 predicted\log(odds)

4) 误差低于阈值或达到迭代次数,返回F_m(x),然后算出预测的概率值,根据概率的阈值将其归到相应的类别。

 

参考:StatQuest with Josh Starmer

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值