这一篇记录一下目前比较常用的集成算法GBDT。集成算法从根上来看,主要分为两大类--boosting和bagging。先说bagging,他的思想是建立多个弱学习期,最后的结果进行投票决定,而且每个弱学习器的训练样本都是在总样本中随机抽样的,这个算法是并行的,每个弱学习器是一起运算的。而boosting算法,其原理是在上一个弱学习器的基础上,构建下一个弱学习器,也就是根据上一个弱学习器的结果,对样本进行加权等操作,再构建下一个弱学习器,这个算法是不能并行运算的。
bagging算法的例子有随机森林,boosting算法的例子有adaboost,GBDT,XGBOOST。
adaboost是将上一个弱学习器判断错误的样本的权重加大,然后让下一个弱学习器对这些分错的样本进行重点学习,从而将误差降低,最后将这些弱学习器进行加权组合,误差率低的,赋予较大的权重,使其在决策中起到较大的作用,而误差率高的,赋予较小的权重。
损失函数可以对本身求微分得到最小值,然后再求出相应的参数。
GBDT的思想是初始学习一个基础决策树,然后用决策树输出一个结果,然后求这棵决策树的误差,然后再建立下一棵树去拟合上一棵树的误差,本质是:在m轮,寻找一个函数(决策树)h(x),去拟合上一轮的误差。也就是不停的寻找函数,加入到前边已经求出的函数的线性组合当中。在我们得到第二棵树的输出时,我们想要的是,这棵树的误差达到最小(本轮树拟合的是上一棵树的误差,本轮的误差就是第二棵树的输出与上一棵树的误差的差值),这个误差不能用两个数相减来表示,而是用损失函数来衡量,也就是损失函数达到最小。损失函数不等于误差,当损失函数为平方损失函数时,损失函数的值等于残差,当为其他的损失函数时,值就是相当于残差的估计。
GBDT就是用损失函数的负梯度拟合本轮残差的近似值,我们用负梯度求出第一轮的残差的近似值,然后再第二轮时利用(Xi,rti)再去构建第二棵树,这时就要求出函数h(x)使第二颗树的损失函数最小
GBDT用的必须是CART二叉分类树
具体算法过程如下,
在上一节中,我们介绍了GBDT的基本思路,但是没有解决损失函数拟合方法的问题。针对这个问题,大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示为
![](https://i-blog.csdnimg.cn/blog_migrate/045db25881d01930e2761ea3a11d873d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/69d2aad2eaa7f5eb043274d85727f6b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7f99f5b2410652854b6ae51a0303268e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/99e000b8ab2865de6d2a6cd6842afd74.png)
![](https://i-blog.csdnimg.cn/blog_migrate/86c40e8277cbcd018adbbef3e96ad580.png)
![](https://i-blog.csdnimg.cn/blog_migrate/78f4da24318a887ea9439bff71ae6d26.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2476b13b71a1c8c2ddf4c88822cb35f8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/242b820e45678eee8f7a89ebdc1ffa80.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f09f971bd163a2a7f012faceeb8a9dfa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6a1aa10093e08590dd997e63dd762744.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a1cc904c68ea707987f0b10e241a13e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/69d2aad2eaa7f5eb043274d85727f6b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/78f4da24318a887ea9439bff71ae6d26.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6a1aa10093e08590dd997e63dd762744.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a1cc904c68ea707987f0b10e241a13e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/69d2aad2eaa7f5eb043274d85727f6b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d2e5f8a3fc32eedf4dc98b730f4ef506.png)
![](https://i-blog.csdnimg.cn/blog_migrate/85915155db75c6cb652986c6e59d5f92.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c049603df3d9757c73b3fab9579429ab.png)
![](https://i-blog.csdnimg.cn/blog_migrate/aac595b9d5c227b975d1776d8ac2acc5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/29f7e8ac84ae7bdceeb58cf9bcd1af4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f3485d25ed1ed8b5718b5b419aea55e6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/85915155db75c6cb652986c6e59d5f92.png)
![](https://i-blog.csdnimg.cn/blog_migrate/df17f08a61522e75bb7b78c6cac59d5d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3b6f9759a7abbac935c652e71dc068f2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e2918013f651930d37d12461f46ef48e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c049603df3d9757c73b3fab9579429ab.png)
![](https://i-blog.csdnimg.cn/blog_migrate/aac595b9d5c227b975d1776d8ac2acc5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/29f7e8ac84ae7bdceeb58cf9bcd1af4f.png)
利用
,我们可以拟合一颗CART回归树,得到了第t颗回归树,其对应的叶节点区域
。其中J为叶子节点的个数。
针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值
如下:c 就是上一轮的残差,也就是本轮的输出(本轮的标签y)
![](https://i-blog.csdnimg.cn/blog_migrate/ac2cafb21634429b3448c24e478dbe02.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/10190bbb25b05b113ec0a112eb67393e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7f99f5b2410652854b6ae51a0303268e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/63bd38d67fd7549c63a00a74be98a133.png)
![](https://i-blog.csdnimg.cn/blog_migrate/045db25881d01930e2761ea3a11d873d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/729ab4572f4a9f91655ab39f8457d50d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fe32b82426337314fb696df0b4573ade.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bdb1cf17b24c43bffda2556745129fc3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cb82789ac4a4fd9e37f77c9025d6783e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/312510defa6bef1b3e09730fb25d082f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2528e3bdac25a6559a5b746553092319.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a6ea525963932fdadc30a365d1d72783.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6e01ac236ff44287e9d9832532e99a7a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4cd29fe879ad103c936f5163864fa82d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4cd29fe879ad103c936f5163864fa82d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4cd29fe879ad103c936f5163864fa82d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4cd29fe879ad103c936f5163864fa82d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4cd29fe879ad103c936f5163864fa82d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4cd29fe879ad103c936f5163864fa82d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2a8754a88bb95aadb17aebd1ca94eada.png)
![](https://i-blog.csdnimg.cn/blog_migrate/977c3ad9687d007c2000a01f339169d5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/aac595b9d5c227b975d1776d8ac2acc5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5946ac4ddf024c90425c78bbce6ceae4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/10a2bdfdf74b1caa24ad6adeb0b50cff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9aa50c19a1d970dbf65d666fdf8c3480.png)
![](https://i-blog.csdnimg.cn/blog_migrate/df17f08a61522e75bb7b78c6cac59d5d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d5f60136f8f36763c470eb72b9af67fd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2476b13b71a1c8c2ddf4c88822cb35f8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/242b820e45678eee8f7a89ebdc1ffa80.png)
![](https://i-blog.csdnimg.cn/blog_migrate/69d2aad2eaa7f5eb043274d85727f6b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f09f971bd163a2a7f012faceeb8a9dfa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6a1aa10093e08590dd997e63dd762744.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f2fb7de36e0c45c429db6703ec10ba0e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cd6fba62df7747c2694aa12f3af35b4a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a1cc904c68ea707987f0b10e241a13e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/69d2aad2eaa7f5eb043274d85727f6b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d5f7d08ddf630aea282f0a0ed9d0595f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ac2cafb21634429b3448c24e478dbe02.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
这一步就是让第二棵树的损失函数最小,求出让他损失函数最小的C值,就求出了函数h(x)。
这样我们就得到了本轮的决策树拟合函数如下:
![](https://i-blog.csdnimg.cn/blog_migrate/e11fe70f26c1d6550fdd8a334c3781f1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a1cc904c68ea707987f0b10e241a13e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7f99f5b2410652854b6ae51a0303268e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/977c3ad9687d007c2000a01f339169d5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/10190bbb25b05b113ec0a112eb67393e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f3485d25ed1ed8b5718b5b419aea55e6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cd6fba62df7747c2694aa12f3af35b4a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/58a51ade6d20dd82292cd6aa93c1734d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ac2cafb21634429b3448c24e478dbe02.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/10190bbb25b05b113ec0a112eb67393e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a8983d30e9e704d47673869d9a54e40d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a1cc904c68ea707987f0b10e241a13e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d0dfa7bff4fa5a140ab2a0e23f704382.png)
![](https://i-blog.csdnimg.cn/blog_migrate/74a71a19be8ae201147a1f243f80f3f5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/10190bbb25b05b113ec0a112eb67393e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
从而本轮最终得到的强学习器的表达式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/6a1aa10093e08590dd997e63dd762744.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a1cc904c68ea707987f0b10e241a13e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7f99f5b2410652854b6ae51a0303268e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6a1aa10093e08590dd997e63dd762744.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f2fb7de36e0c45c429db6703ec10ba0e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cd6fba62df7747c2694aa12f3af35b4a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a1cc904c68ea707987f0b10e241a13e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d5f7d08ddf630aea282f0a0ed9d0595f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/977c3ad9687d007c2000a01f339169d5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/10190bbb25b05b113ec0a112eb67393e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f3485d25ed1ed8b5718b5b419aea55e6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cd6fba62df7747c2694aa12f3af35b4a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/58a51ade6d20dd82292cd6aa93c1734d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ac2cafb21634429b3448c24e478dbe02.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/10190bbb25b05b113ec0a112eb67393e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a8983d30e9e704d47673869d9a54e40d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3522b22b8bc19c759bb63fdc8602261.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a1cc904c68ea707987f0b10e241a13e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d0dfa7bff4fa5a140ab2a0e23f704382.png)
![](https://i-blog.csdnimg.cn/blog_migrate/74a71a19be8ae201147a1f243f80f3f5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/605a49bd6afbd09d8029eafd1408f003.png)
![](https://i-blog.csdnimg.cn/blog_migrate/10190bbb25b05b113ec0a112eb67393e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f74c1d7fed0254f6a39d4b51871548a3.png)
通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。
这样轮回下去,直到误差小于一个值的时候,才停止。