GBDT见习
GBDT主要由三个概念组成:Regression Decistion Tree(即DT),Gradient Boosting(即GB),Shrinkage (算法的一个重要演进分枝,目前大部分源码都按该版本实现),是一种用于回归的迭代决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。
一、 DT:回归树 Regression Decision Tree
GBDT中的树都是回归树,不是分类树
二、 GB:梯度迭代 Gradient Boosting
GBDT是把所有树的结论累加起来做最终结论的,所以可以想到每棵树的结论并不是年龄本身,而是年龄的一个累加量。GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。
监督学习的关键概念:模型(model)、参数(parameters)、目标函数(objective function)
实例详解:
如下表所示:一组数据,特征为年龄、体重,身高为标签值。共有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.初始化弱学习器:
由于此时只有根节点,样本1,2,3,4都在根节点,此时要找到使得平方损失函数最小的参数ΥΥ,怎么求呢?平方损失显然是一个凸函数,直接求导,倒数等于零,得到ΥΥ。
所以初始化时,ΥΥ取值为所有训练样本标签值的均值。Υ=(1.1+1.3+1.7+1.8)/4=1.475Υ=(1.1+1.3+1.7+1.8)/4=1.475,此时得到初始学习器f0(x)f0(x)
2.对迭代轮数m=1:
计算负梯度——残差
说白了,就是残差(上面已经解释过了),在此例中,残差在下表列出:
编号 | 真实值 | f0(x)f0(x) | 残差 |
---|---|---|---|
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 |
此时将残差作为样本的真实值训练f1(x)f1(x),即下表数据
编号 | 年龄(岁) | 体重(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。
此时还需要做一件事情,给这两个叶子节点分别赋一个参数,来拟合残差。
这里其实和上面初始化学习器是一个道理,平方损失,求导,令导数等于零,化简之后得到每个叶子节点的参数ΥΥ,其实就是标签值的均值。
根据上述划分节点:
样本1,2为左叶子节点,(x1,x2∈R11)(x1,x2∈R11),所以Υ11=(−0.375−0.175)/2=−0.275Υ11=(−0.375−0.175)/2=−0.275。
样本3,4为左叶子节点,(x3,x4∈R11)(x3,x4∈R11),所以Υ21=(0.225+0.325)/2=0.275Υ21=(0.225+0.325)/2=0.275。
此时可更新强学习器
3.对迭代轮数m=2,3,4,5,…,M:
循环迭代M次,M是人为控制的参数,迭代结束生成M棵树
4.得到最后的强学习器:
为了方别展示和理解,我们假设M=1,根据上述结果得到强学习器:
=f0(x)+∑j=12Υj1I(x∈Rj1)=f0(x)+∑j=12Υj1I(x∈Rj1)
如图所示得到只迭代一次,只有一颗树的GBDT:
5.预测样本5:
样本5在根节点中(即初始学习器)被预测为1.475,样本5的年龄为25,大于划分节点21岁,所以被分到了右边的叶子节点,同时被预测为0.275。此时便得到样本5的最总预测值为1.75。