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.初始化弱学习器: 

f0(x)=argminγi=1NL(yi,γ)f0(x)=argminγ∑i=1NL(yi,γ)

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

扫描二维码关注公众号,回复: 1587430 查看本文章
L(yi,Υ))Υ=(12[yΥ]2)Υ=Υy∂L(yi,Υ))∂Υ=∂(12[y−Υ]2)∂Υ=Υ−y

Υy=0Υ−y=0,得 Υ=yΥ=y

所以初始化时,ΥΥ取值为所有训练样本标签值的均值。Υ=(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) 

f0(x)=Υ=1.475f0(x)=Υ=1.475


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

ri1=[L(yi,f(xi)))f(xi)]f(x)=f0(x)ri1=−[∂L(yi,f(xi)))∂f(xi)]f(x)=f0(x)

  说白了,就是残差(上面已经解释过了),在此例中,残差在下表列出: 
 

编号 真实值 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。 
此时还需要做一件事情,给这两个叶子节点分别赋一个参数,来拟合残差。 

Υj1=argminΥxiRj1L(yi,f0(xi)+Υ)Υj1=argmin⏟Υ∑xi∈Rj1L(yi,f0(xi)+Υ)

这里其实和上面初始化学习器是一个道理,平方损失,求导,令导数等于零,化简之后得到每个叶子节点的参数ΥΥ,其实就是标签值的均值。 
根据上述划分节点: 
样本1,2为左叶子节点,(x1,x2R11)(x1,x2∈R11),所以Υ11=(0.3750.175)/2=0.275Υ11=(−0.375−0.175)/2=−0.275。 
样本3,4为左叶子节点,(x3,x4R11)(x3,x4∈R11),所以Υ21=(0.225+0.325)/2=0.275Υ21=(0.225+0.325)/2=0.275。 
此时可更新强学习器 

f1(x)=f0(x)+j=12Υj1I(xRj1)f1(x)=f0(x)+∑j=12Υj1I(x∈Rj1)


3.对迭代轮数m=2,3,4,5,…,M: 
  循环迭代M次,M是人为控制的参数,迭代结束生成M棵树


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

f(x)=fM(x)=f0(x)+m=1Mj=1JΥjmI(xRjm)f(x)=fM(x)=f0(x)+∑m=1M∑j=1JΥjmI(x∈Rjm) 
   =f0(x)+j=12Υj1I(xRj1)=f0(x)+∑j=12Υj1I(x∈Rj1)

如图所示得到只迭代一次,只有一颗树的GBDT: 

这里写图片描述


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


猜你喜欢

转载自blog.csdn.net/luzaofa/article/details/80319701
今日推荐