《机器学习技法》学习笔记11——GBDT

http://blog.csdn.net/u011239443/article/details/77435463

Adaptive Boosted Decision Tree

关于AdaBoost、提升树可先参阅:http://blog.csdn.net/u011239443/article/details/77294201 这里仅对其做一定的补充。 对提升决策树桩的模型中,我们对树的节点进行分隔时,需要该节点中的各个数据的权重来计算总错误:

weightedError = D.T * errArr

树根比较好算,数据都是全量的数据,但是如果是非根的叶节点呢?这就是困难了。于是,我们就想到了变动数据集方法:

比如说,某条数据的权重是0.1,我们就似的样本抽取到它的概率变为0.1。

AdaBoost优化背后的意义

unt+1u_n{t+1}为第n个数据,t+1轮优化的权重

我们把上述橙色部分叫做voting score

我们回过头来看模型,并套用SVM的形式:

套用SVM,我们可知我们需要对模型的优化是:

于是,我们得到了AdaBoost的损失函数:

使用梯度下降的方法,调整最后g(也就是h),来最小化误差:

使用泰勒展开:

使得损失函数等价为:

于是,我们只需最小化:

得到:

我们可以看到,我们选择的h是要使得其预测率最小则结果最优。这就把问题转移到了函数h的最优化的问题了,这就变成了我们非常熟悉的问题,比如 如果是 AdaBoost Decision Tree,那就用决策树回归最优化h就行了。

然后我们来调整 η,设gtg_t就是我们的最优化h,那么最优化问题变成了:

我们对其求导,最优化得到:

对,没有错!AdaBoost中的 α 的含义其实就是在最优化g函数梯度下的最优化的步长!

Gradient Boosting

我们上节套用SVM来得出Adaboost的损失函数:

但其实我们可以用其他误差来得出损失函数,这就是叫做Gradient Boosting,通常使用差方来得到:

对上式进行关于S在SnS_n上泰勒展开:

即上式中 x = s , x0=Snx_0 = Sn得到了:

由于我们想让η来调节步长,而h函数只是决定方向,所以需要让h(x)h(x)为负数,但是绝对值又要尽可能的小,于是优化问题变成了:

可以看出我们的h其实是最优化回归:

也就是说,h是想把输入特征,回归拟合输出为实际值和上一轮模型预测值差值。

同样的,假设我们已经找到最佳的回归函数g,接下来调整η:

可以看到,这也是一个简单的一元回归:

总结GBDT模型如下:

总结集成模型

bagging 和 boosting 加上 决策树 可以分别得到:

为什么集成方法效果好?因为它有很多不同的模型表示,所以表达能力非常好,避免的欠拟合;而又是因为有很多模型混合,所以避免的某些模型的过拟合。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券