甲乙小朋友的房子

甲乙小朋友很笨,但甲乙小朋友不会放弃

0%

机器学习算法-GBDT

之前的AdaBoostDTree的误差函数是指数型的。GBDT的误差函数是任意指定的。GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。

GBDT的误差函数

  • 紫色部分:之前学过的所有树的结果叠加
  • 红色和蓝色部分:本轮学习的模型
  • 将之前学习的树与本轮学习的模型叠加,就得到了本次的预测值

目标

  1. 求函数h(x)的形式
  2. 求h(x)的步长η

回归问题求解目标

对于回归(regression)问题,误差函数一般采用平方误差。即:

为了进一步求解,我们对上式进行taylor展开,即:

其中: - 左边一项\(err(S_n,y_n)\)是常量(因为\(S_n\)\(y_n\)都已知) - 右边一项应该对s求导,并在sn这点取导数值(\(error=(s-y)^2\)求导之后得到\(2(s-y)\)

那么,上式等于:

求h(x)

为了让上式最小化,那么貌似\(|h(x)|\)无穷大即可实现,这不科学!于是我们要对\(h(x)\)的大小进行限制(类似归一化)————加入惩罚项\((h(x_n))^2\),即将上式变为:

而上式可变为:

其中的\((s_n-y_n)^2\)是常数,记为constant

那么新的目标就变为:用\(x_n\)\(y_n-s_n\)做一个regression即可。即:

经过penalize一番折腾之后,h终于有个像模像样的形式了:即regression with residuals(残差)。

求步长η

需要求得一个η,使得下式最小化:

为了方便计算,我们将平方内的项取负:

上式的\(y_n-s_n\)即residuals(残差).这是一个单变量的线性回归问题,其中输入是用gt转换后的数据,输出是残差(residual)。

GBDT算法

输出:\(\sum_t^T\alpha_t g_t(x)\),即一堆权重\(\alpha_t\)和一堆决策树\(g_t(x)\) 步骤:

1)利用C&RT去学{x, yn-sn},保留这一轮学出来的树gt(x)

2)再求{gt(x), residual}线性回归,最小化目标函数求出来ita

3)更新sn

学习足够多次数后,返回组合的GBDT。