python-GBDT算法原理1

GBDT的基本思想是:“积硅步以致千里” 也就是说我每次都只学习一点,然后一步步的接近最终要预测的值(完全是gradient的思想),换句话说,我们先用一个初始值来学习一颗决策树,叶子出可以得到预测值,以及预测之后的残差,然后后面的决策树就要基于前面决策树的残差来学习,直到预测值和真实值的残差为零,最终对预测样本的预测值,就是前面许多颗决策树预测值的累加。这个过程都是每次学习一点,最后累加,所以叫做“积跬步之千里”。

举例说明:
训练集:(A,14岁),(B,16岁),(C,24岁),(D,26岁)
训练数据的均值为:20岁;(这个很重要,因为GBDT与i开始需要设置预测的均值,这样后面才会有残差)
决策树的个数为:2棵
每个样本的特征有两个:购买金额是否小于1K,经常去百度提问还是回答?

开始GBDT学习了

首先,输入初值是20岁,根据第一个特征(具体选择那些特征可以根据信息增益来计算选择),可以把4个样本分为两类,一类是购物金额<=1K ,一类是>=1K的。假如这个时候我们就停止了第一棵树的学习,这时候我们就可以统计一下每个叶子中包含哪些样本,这样样本的均值是多少,因为这个时候的均值就要作为所有被分到这个叶子的样本的预测值了。比如AB被分到左叶子,CD被分到右叶子,那么预测的结果就是:AB都是15岁,CD都是25岁。和他们的实际值一看,结果发现出现的残差,ABCD的残差分别是-1,1,-1,1。这个残差,我们要作为后面第二颗决策树的学习样本。
20(14,16,24,26)
15(16,14) 25(24,26)
(1,-1) (-1,1)
然后学习第二颗决策树,我们把第一课的残差样本(A,-1),(B,1),(C,-1),(D,1)输入,此时我们选择的特征是经常去百度提问还是回答。这个时候我们又可以得到两部分,一部分是AC组成了左叶子,另一部分是BD组成了右叶子。那么,经过计算可知左叶子的均值为-1,右叶子均值为1,那么第二颗树的预测结果就是AC都是-1,BD都是1,我们再来计算一下此时的残差,发现ABCD的残差都是0,停止学习~
0(1,-1,-1,1)
-1(-1,-1) 1(1,1)
(0 0) (0,0)

这样,我么的两棵决策树就都学习好了。进入测试环节:
测试样本:请预测一个购物金额为3K,经常去百度问淘宝相关问题的女生的年龄~

我们提取2个特征:购物金额3K,经常去百度上面提问问题

第一课树---->购物金额大于1K,---->右叶子,初步说明这个女生25岁
第二克数----->经常去百度提问------>左叶子,说明这个女生的残差为-1

叠加前面每棵树得到的结果:25-1 = 24岁,最终预测结果为24岁,

猜你喜欢

转载自blog.csdn.net/zhonglongshen/article/details/78951037
今日推荐