原理:
提升树利用加法模型与向前分步算法实现学习的优化过程。
(我觉得就是把提升树算法里的残差用当前损失函数的负梯度在当前模型的值近似替代,拟合下一颗树。)
为啥用负梯度的值而不用提升树里的方法算残差呢,是因为当前损失函数是平方损失和指数损失函数时每步优化都很简单,但是对于一般损失函数而言,每一步的优化并不是那么容易,所以提出了梯度提升作为残差的近似值来拟合。基于残差进行学习,那么损失函数就会越来越小。
这样是不是可以这样认为:提升树是梯度提升回归树的一个特例。
梯度提升算法
输入:训练数据集T = {(x1,y1),(x2,y2),…,(xN,yN)},
损失函数为:L(y,f(x))
输出为:回归树F(x)
(1).初始化
(2).对m = 1,2,…,M
a:对 i = 1,2,…,N计算
b:对rmi拟合一个回归树,得到第m棵树的叶节点区域Rmj,j = 1,2,…,J.
c:对j = 1,2,…,J,计算
(3)得到回归树
举个栗子:
有上面四组数据每组有两个特征一个标签。
首先构造f0取训练样本标签值的均值
(1.1+1.3+1.7+1.8)/4 = 1.475
(意思就是找到一个值使得与四个真实的误差最小,所以取得均值。)
算残差,用梯度算(但这里是损失函数用的是平方误差,因此求完梯度后在乘个无关紧要的0.5,那么就是真实值减预测值就是残差。)
用残差去拟合回归树
同样的方法计算ms,找到最小的,取相应的切分点进行划分。
继续算ms取最小,成为切分点。最终得到第一棵回归树。
这样就可以进行更新:
前面算的
1.475+0.1(-0.375) = 1.4375
1.475+0.1(-0.175) = 1.4575
1.475+0.1(0.225) = 1.4975
1.475+0.1(0.325) = 1.5075
这里的0.1是因为为了避免过拟合乘的超参,可以当作做了正则化。
以此作为更新后的值与真实值做残差这样可以得到第二棵树的值,可以在得出第二棵树的残差值,以此类推第三棵,第四棵,第五棵,第六棵。。。但这里的第几棵树是根据一开始设的超参设置。
最后得到第五个数据的预测值为:
1.475 +0.1(0.225+0.2025+0.1823+0.164+0.1476)=1.56714