Gradient Boosting Decision Tree
AdaBoost Decision Tree
- 将AdaBoost应用到DT:对数据加权,对加权数据学习 DTree ( D , u t ) \operatorname{DTree}(\mathcal D, \bold u^t) DTree(D,ut)
- 不像AdaBoost那样将算法进行加权修改?
- 调整数据在数据集中出现的比例——按权重比例采样得到 D ~ t \tilde{\mathcal D}_t D~t
- 对于完全生成决策树,往往对于既有数据,所有数据不同,
E
i
n
=
0
E_{in} = 0
Ein=0
- 投票系数如果按照 α t = 1 − ϵ t ϵ t \alpha_t = \sqrt{\frac {1 - \epsilon_t}{\epsilon_t}} αt=ϵt1−ϵt,会得到无穷大系数
- 需要对DT进行剪枝——限制树的高度
- 基于部分数据而非全部数据——采样过程已经实现
- 一个特例:树限制为1层(纯度由分类损失)——AdaBoost-Stump
Optimization of AdaBoost
- 权重变更: u n ( t + 1 ) = u n ( t ) ⋅ m t − y n g t ( x n ) = u n ( t ) ⋅ exp ( − y n α t g t ( x n ) ) u_n^{(t + 1)} = u_n^{(t)} \cdot m_t^{-y_n g_t(\bold x_n)} = u_n^{(t)} \cdot \exp (-y_n \alpha_t g_t(\bold x_n)) un(t+1)=un(t)⋅mt−yngt(xn)=un(t)⋅exp(−ynαtgt(xn))
- T T T次训练整合:
u n ( t + 1 ) = u n ( t ) ⋅ ∏ t = 1 T exp ( − y n α t g t ( x n ) ) = 1 N exp ( − y n ∑ t = 1 T α t g t ( x n ) ) u_n^{(t + 1)} = u_n^{(t)} \cdot \prod _{t = 1}^T \exp (-y_n \alpha_t g_t(\bold x_n)) = \frac 1N \exp (-y_n \sum_{t = 1}^T \alpha_t g_t(\bold x_n)) un(t+1)=un(t)⋅t=1∏Texp(−ynαtgt(xn))=N1exp(−ynt=1∑Tαtgt(xn))
- 最终的
G
(
x
n
)
=
sign
(
∑
t
α
t
g
t
(
x
n
)
)
G(\bold x_n) = \operatorname{sign}(\sum_t \alpha_t g_t(\bold x_n))
G(xn)=sign(∑tαtgt(xn))
- 括号内称之为投票分数
- 类比SVM,投票分数乘上
y
n
y_n
yn,表示符号和非归一化的间隔
- 我们希望间隔越来越大
- 那么权重更新的指数项就会更小
- 因此整体权重就会更小—— ∑ n u N ( t ) \sum_n u_N^{(t)} ∑nuN(t)越来越小
- AdaBoost的最小化目标函数:
∑ n = 1 N u n ( t + 1 ) = 1 N ∑ n = 1 N exp ( − y n ∑ t = 1 T α t g t ( x n ) ) \sum_{n = 1}^N u_n^{(t + 1)} = \frac 1N \sum_{n = 1}^N \exp (-y_n \sum_{t = 1}^T \alpha_t g_t(\bold x_n)) n=1∑Nun(t+1)=N1n=1∑Nexp(−ynt=1∑Tαtgt(xn))
- 令 s = ∑ t α t g t ( x n ) s = \sum_t \alpha_t g_t(\bold x_n) s=∑tαtgt(xn),那么上式的 e r r A D A = exp ( − y s ) err_{ADA} = \exp(-ys) errADA=exp(−ys)称为指数loss,为0/1 loss的上界——做好AdaBoost可以想办法把0/1 loss做的好
- 梯度下降优化:找到一个“方向” g t g_t gt(下述中的 h h h),以优化:
min h E ^ A D A = 1 N ∑ n = 1 N exp ( − y n ( ∑ τ = 1 t − 1 α τ g τ ( x n ) + η h ( x n ) ) ) \min_h \quad \hat E_{ADA} = \frac 1N \sum_{n = 1}^N \exp \left(-y_n \left(\sum_{\tau = 1}^{t - 1} \alpha_{\tau} g_{\tau}(\bold x_n) + \eta h(\bold x_n) \right) \right) hminE^ADA=N1n=1∑Nexp(−yn(τ=1∑t−1ατgτ(xn)+ηh(xn)))
- 带入上述的权重更新公式以及泰勒展开得到近似结果:
min h E ^ A D A ≈ ∑ n = 1 N u n ( t ) − η ∑ n = 1 N u n ( t ) y n h ( x n ) \min_h \quad \hat E_{ADA} \approx \sum_{n = 1}^N u_n^{(t)} - \eta \sum_{n = 1}^N u_n^{(t)} y_n h(\bold x_n) hminE^ADA≈n=1∑Nun(t)−ηn=1∑Nun(t)ynh(xn)
- 最小化目标(后一项):
min h ∑ n = 1 N u n ( t ) y n h ( x n ) \min_h \quad \sum_{n = 1}^N u_n^{(t)} y_n h(\bold x_n) hminn=1∑Nun(t)ynh(xn)
- 对二分类任务, h ( x ) h(\bold x) h(x)取值为 { − 1 , + 1 } \{-1, +1\} {−1,+1},因此有(后一项省去了样本数 N N N):
∑ n = 1 N u n ( t ) y n h ( x n ) = − ∑ n u n ( t ) + 2 E i n u ( t ) ( h ) \sum_{n = 1}^N u_n^{(t)} y_n h(\bold x_n) = -\sum_n u_n^{(t)} + 2 E_{in}^{u^{(t)}}(h) n=1∑Nun(t)ynh(xn)=−n∑un(t)+2Einu(t)(h)
- 从AdaBoost的算法中找出的好的 g t g_t gt,也就对应着GD优化中的 h h h
- AdaBoost找到最理想的
g
t
g_t
gt之后,是否可以最大化
η
\eta
η?(系数)
- 最优化的 η t \eta_t ηt相比于固定的 η \eta η是贪婪地更快的
- 正例 u n ( t ) exp ( − η ) u_n^{(t)} \exp(- \eta) un(t)exp(−η)
- 反例 u n ( t ) exp ( + η ) u_n^{(t)} \exp(+ \eta) un(t)exp(+η)
- 改进目标:
E ^ A D A = ( ∑ n = 1 N u n ( t ) ) ⋅ ( ( 1 − ϵ t ) exp ( − η ) + ϵ t exp ( + η ) ) \hat E_{ADA} = \left( \sum_{n = 1}^N u_n^{(t)} \right) \cdot \left( (1 - \epsilon_t) \exp(-\eta) + \epsilon_t \exp(+\eta) \right) E^ADA=(n=1∑Nun(t))⋅((1−ϵt)exp(−η)+ϵtexp(+η))
-
上式对 η \eta η求导,得到最优 η y = ln 1 − ϵ t ϵ t = α t \eta_y = \ln \sqrt{\frac {1 - \epsilon_t} {\epsilon_t}} = \alpha_t ηy=lnϵt1−ϵt=αt
-
AdaBoost:函数近似梯度的最大下降
Gradient Boosting
- 梯度下降角度的AdaBoost的形式化(二元输出假设函数):
min η min h 1 N ∑ n = 1 N exp ( − y n ( ∑ τ = 1 t − 1 α τ g τ ( x n ) + η h ( x n ) ) ) \min_{\eta} \min_{h} \quad \frac 1N \sum_{n = 1}^N \exp \left(-y_n \left(\sum_{\tau = 1}^{t - 1} \alpha_{\tau} g_{\tau}(\bold x_n) + \eta h(\bold x_n) \right) \right) ηminhminN1n=1∑Nexp(−yn(τ=1∑t−1ατgτ(xn)+ηh(xn)))
- 通用化梯度Boost:
min η min h 1 N ∑ n = 1 N err ( ∑ τ = 1 t − 1 α τ g τ ( x n ) + η h ( x n ) , y n ) \min_{\eta} \min_{h} \quad \frac 1N \sum_{n = 1}^N \operatorname{err} \left(\sum_{\tau = 1}^{t - 1} \alpha_{\tau} g_{\tau}(\bold x_n) + \eta h(\bold x_n) , y_n \right) ηminhminN1n=1∑Nerr(τ=1∑t−1ατgτ(xn)+ηh(xn),yn)
-
上式中, h h h可以改进为任意的假设函数,通常为实值输出函数
-
回归任务: e r r ( s , y ) = ( s − y ) 2 err(s, y) = (s - y)^2 err(s,y)=(s−y)2
- 泰勒展开后近似: min h c o n s t a n t + η N ∑ n 2 h ( x n ) ( s n − y n ) \min_h \ constant + \frac \eta N \sum_n 2 h(\bold x_n) (s_n - y_n) minh constant+Nη∑n2h(xn)(sn−yn)
- h h h的幅度由 η \eta η控制
- 避免够大的幅度,引入惩罚项: min h c o n s t a n t + η N ∑ n ( 2 h ( x n ) ( s n − y n ) + h ( x n ) ) 2 \min_h \ constant + \frac \eta N \sum_n (2 h(\bold x_n) (s_n - y_n) + h(\bold x_n))^2 minh constant+Nη∑n(2h(xn)(sn−yn)+h(xn))2
- 化简: min h c o n s t a n t + η N ∑ n ( c o n s t a n t + ( h ( x n ) − ( y n − s n ) ) ) 2 ) \min_h \ constant + \frac \eta N \sum_n (constant + (h(\bold x_n) - (y_n - s_n)))^2) minh constant+Nη∑n(constant+(h(xn)−(yn−sn)))2)
- 目标,新的 h h h要尽可能拟合现有的残差,即在 { x n , y n − s n } \{ \bold x_n, y_n - s_n\} {xn,yn−sn}上的回归
-
探索 η \eta η: min 1 N ∑ n ( s n + η g t ( x n ) − y n ) 2 \min \ \frac 1N \sum_n (s_n + \eta g_t(\bold x_n) - y_n)^2 min N1∑n(sn+ηgt(xn)−yn)2
- 进一步化简: min 1 N ∑ n ( ( y n − s n ) − η g t ( x n ) ) 2 \min \ \frac 1N \sum_n ((y_n - s_n) - \eta g_t(\bold x_n))^2 min N1∑n((yn−sn)−ηgt(xn))2
- 另外一个单变量线性回归回归,在 { g t i n p u t , r e s i d u a l } \{g_t \ input, residual\} {gt input,residual}上的回归
-
总结:GBDT,每一次迭代
- 由回归算法完成对
{
x
n
,
y
n
−
s
n
}
\{ \bold x_n, y_n - s_n\}
{xn,yn−sn}的最小平方误差回归(初始化分数为0)
- 这里需要考虑对数据的采样和CART的剪枝
- 计算系数 α t \alpha_t αt,通过对 { g t ( x n ) , y n − s n } \{ g_t(\bold x_n), y_n - s_n \} {gt(xn),yn−sn}的先行回归获得
- 更新分数的计算规则 s n ← s n + α t g t ( x n ) s_n \gets s_n + \alpha_t g_t(\bold x_n) sn←sn+αtgt(xn)
- 迭代结束,返回最终的 G G G
- 由回归算法完成对
{
x
n
,
y
n
−
s
n
}
\{ \bold x_n, y_n - s_n\}
{xn,yn−sn}的最小平方误差回归(初始化分数为0)
Summary of Aggregation
- 强大的 G G G可解解决单个分类器欠拟合的问题
- 适当的 G G G也可以缓解过拟合的问题