伪代码图

061e486d.png

实例讲解

如下表所示:一组数据,特征为年龄、体重,身高为标签值。共有5条数据,前四条为训练样本,最后一条为要预测的样本。

编号 年龄(岁) 体重(kg) 身高(m)(标签值)
1 5 20 1.1
2 7 30 1.3
3 21 70 1.7
4 30 60 1.8
5 25 65 ?

1. 初始化弱学习器:

GBDT - 图2%3Dargmin%7B%5Cgamma%7D%20%5Cdisplaystyle%5Csum%7Bi%3D1%7D%5E%7BN%7D%20L(yi%2C%5Cgamma)%0A#card=math&code=f_0%28x%29%3Dargmin%7B%5Cgamma%7D%20%5Cdisplaystyle%5Csum_%7Bi%3D1%7D%5E%7BN%7D%20L%28y_i%2C%5Cgamma%29%0A&height=53&width=209)

由于此时只有根节点,样本1,2,3,4都在根节点,此时要找到使得平方损失函数最小的参数 GBDT - 图3,怎么求呢?平方损失显然是一个凸函数,直接求导,导数等于零,得到 GBDT - 图4

GBDT - 图5%7D%7B%5Cpartial%20%5Cgamma%7D%20%3D%20%5Cfrac%7B%5Cpartial(%5Cfrac%7B1%7D%7B2%7D(y-%5Cgamma)%5E2)%7D%7B%5Cpartial%20%5Cgamma%7D%3D%5Cgamma-y%3D0%20%0A#card=math&code=%5Cfrac%7B%5Cpartial%20L%28y_i%2C%20%5Cgamma%29%7D%7B%5Cpartial%20%5Cgamma%7D%20%3D%20%5Cfrac%7B%5Cpartial%28%5Cfrac%7B1%7D%7B2%7D%28y-%5Cgamma%29%5E2%29%7D%7B%5Cpartial%20%5Cgamma%7D%3D%5Cgamma-y%3D0%20%0A&height=50&width=284)

求得,GBDT - 图6
所以,考虑到有N个样本,GBDT - 图7,初始化时,GBDT - 图8为所有训练样本标签值的均值,即GBDT - 图9%2F4%3D1.475#card=math&code=%5Cgamma%3D%281.1%2B1.3%2B1.7%2B1.8%29%2F4%3D1.475&height=20&width=270),此时,得到初始化学习器GBDT - 图10#card=math&code=f_0%28x%29&height=20&width=38):

GBDT - 图11%3D%5Cgamma%3D1.475%0A#card=math&code=f_0%28x%29%3D%5Cgamma%3D1.475%0A&height=20&width=131)

2. 对迭代轮数m=1:
计算负梯度

GBDT - 图12)%7D%7B%5Cpartial%20f(xi)%7D%20%5Cbigg%5D%7Bf(x)%3Df0(x)%7D%3Df(x_i)-y_i%0A#card=math&code=%5Cgamma%7Bi1%7D%3D-%5Cbigg%5B%20%5Cfrac%7B%5Cpartial%20L%28yi%2Cf%28x_i%29%29%7D%7B%5Cpartial%20f%28x_i%29%7D%20%5Cbigg%5D%7Bf%28x%29%3Df_0%28x%29%7D%3Df%28x_i%29-y_i%0A&height=49&width=329)

如上面 1. 初始化弱学习器 所讲,如果我们采用平方损失函数,那么,这里的结果,其实就是残差(残差指实际观察值与估计值之间的差),如下表列出。

编号 真实值 GBDT - 图13#card=math&code=f_0%28x%29) 残差
1 1.1 1.475 -0.375
2 1.3 1.475 -0.175
3 1.7 1.475 0.225
4 1.8 1.475 0.325

此时,将残差作为样本的真实值训练GBDT - 图14#card=math&code=f_1%28x%29&height=20&width=38),即下表数据

编号 年龄(岁) 体重(kg) 身高(m)(标签值)
1 5 20 -0.375
2 7 30 -0.175
3 21 70 0.225
4 30 60 0.325

接着,寻找回归树的最佳划分节点,遍历每个特征的每个可能取值。从年龄特征的5开始,到体重特征的70结束,分别计算方差,找到使方差最小的那个划分节点即为最佳划分节点。
例如:以年龄7为划分节点,将小于7的样本划分为一类,大于等于7的样本划分为另一类。样本1为一组,样本2,3,4为一组,两组的方差分别为0,0.047,两组方差之和为0.047。所有可能划分情况如下表所示:

划分点 小于划分点的样本 大于等于划分点的样本 总方差
年龄5 / 1,2,3,4 0.082
年龄7 1 2,3,4 0.047
年龄21 1,2 3,4 0.0125
年龄30 1,2,3 4 0.062
体重20 / 1,2,3,4 0.082
体重30 1 2,3,4 0.047
体重60 1,2 3,4 0.0125
体重70 1,2,4 3 0.0867

最右边的方差就是计算两边样本的方差和,可以自己算一下看看。
以上划分点是的总方差最小为0.0125有两个划分点:年龄21和体重60,所以随机选一个作为划分点,这里我们选年龄21。
此时还需要做一件事情,给这两个叶子节点分别赋一个参数,来拟合残差。

GBDT - 图15%2B%5Cgamma)%0A#card=math&code=%5Cgamma%7Bj1%7D%3D%5Cunderbrace%7Bargmin%7D%5Cgamma%20%5Csum%7Bx_i%20%5Cin%20R%7Bj1%7D%7DL%28y_i%2C%20f_0%28x_i%29%2B%5Cgamma%29%0A&height=49&width=263)

这里其实和上面初始化学习器是一个道理,平方损失,求导,令导数等于零,化简之后得到每个叶子节点的参数GBDT - 图16,其实就是标签值的均值。
根据上述划分节点:
样本1,2为左叶子节点,(GBDT - 图17),所以GBDT - 图18%2F2%3D-0.275#card=math&code=%5Cgamma%7B11%7D%3D%28-0.375-0.175%29%2F2%3D-0.275&height=20&width=259)。
样本3,4为右叶子节点,(![](https://g.yuque.com/gr/latex?x_3%2C%20x_4%20%5Cin%20R
%7B21%7D#card=math&code=x3%2C%20x_4%20%5Cin%20R%7B21%7D&height=18&width=89)),所以GBDT - 图19%2F2%3D0.275#card=math&code=%5Cgamma_%7B21%7D%3D%280.225%2B0.325%29%2F2%3D0.275&height=20&width=232)。
此时可更新强学习器:

GBDT - 图20%3Df0(x)%2B%5Csum%7Bj%3D1%7D%5E2%20%5Cgamma%7Bj1%7D%20I(x%20%5Cin%20R%7Bj1%7D)%0A#card=math&code=f1%28x%29%3Df_0%28x%29%2B%5Csum%7Bj%3D1%7D%5E2%20%5Cgamma%7Bj1%7D%20I%28x%20%5Cin%20R%7Bj1%7D%29%0A&height=55&width=245)

3.对迭代轮数m=2,3,4,5….M:
循环迭代M次,M是超参数,表示生成多少棵树

4. 得到最后的强学习器:
为了方便展示和理解,假设M=1。根据上述结果得到强学习器:

GBDT - 图21%3DfM(x)%26%3Df_0(x)%2B%5Csum%7Bm%3D1%7D%5EM%20%5Csum%7Bj%3D1%7D%5EJ%20%5Cgamma%7Bjm%7DI%20%5Cqquad(x%20%5Cin%20R%7Bjm%7D)%20%20%5C%5C%0A%26%3Df_0(x)%2B%5Csum%7Bj%3D1%7D%5E2%20%5Cgamma%7Bj1%7DI%20%5Cqquad%20(x%20%5Cin%20R%7Bj1%7D)%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%20%0Af%28x%29%3DfM%28x%29%26%3Df_0%28x%29%2B%5Csum%7Bm%3D1%7D%5EM%20%5Csum%7Bj%3D1%7D%5EJ%20%5Cgamma%7Bjm%7DI%20%5Cqquad%28x%20%5Cin%20R%7Bjm%7D%29%20%20%5C%5C%0A%26%3Df_0%28x%29%2B%5Csum%7Bj%3D1%7D%5E2%20%5Cgamma%7Bj1%7DI%20%5Cqquad%20%28x%20%5Cin%20R%7Bj1%7D%29%0A%5Cend%7Baligned%7D%0A&height=112&width=382)

如图所示,得到只迭代一次,只有一棵树的GBDT:
2bb72011.png

5.预测样本5:
  样本5在根节点中(即初始学习器)被预测为1.475,样本5的年龄为25,大于划分节点21岁,所以被分到了右边的叶子节点,同时被预测为0.275。此时便得到样本5的最总预测值为1.75。

引用