AdaBoost-DTree
根据AdaBoost的思想,
我们希望在生成多个分类器
gt
g
t
的时候,增加一个类似于adaboost的权重
ut
u
t
,即
gt=A(D,ut)
g
t
=
A
(
D
,
u
t
)
,在最后组成最终分类器
G
G
的时候,增加权重,这是整体的思路。
那么现在的问题是如何嵌入一个 ut u t ,使得 gt=DTree(D,ut) g t = D T r e e ( D , u t ) ,注意到之前的Random-Forest等算法中的 gt g t 仅仅是 DTree(D) D T r e e ( D ) .
如上图所示,本来加入 ut u t 应该是在 Ein E i n 中进行的,但是这不一定能很好地解出,所以这里讲其看成一个black box。注意到 ut u t 在adaboost是怎么引进来的,他是由boost抽样引进的,所以,我们采用红框所示的抽样方法。即对每一组数据 (xn,yn) ( x n , y n ) 按 un u n 的比例概率来抽取,这样的话可以近似地处理 Ein E i n 且不用改最优化的框架(仅仅是“改”了数据)。
权重 at a t 仍采用和adaboost一样的操作。
adaboost-DT用于二分类问题
如上更新,注意到由于是二分类问题 yn y n 是±1,那么 ut u t 可以有很好地表达式,这个结果和我们要回传的 G G 长得十分类似。
如上图所示,用一种粗糙的解释,实际上上上图中橙色框的部分表示的是一种类似于SVM中的margin,我们希望margin越大越好,即如上图灰色框所示,我们最终希望越下越好,那么我们可以再弱一些,我们希望能deresases
∑Nn=1u(t)n
∑
n
=
1
N
u
n
(
t
)
.
采用的是GD,对exp在原点附近泰勒展开后得知我们需要使得
∑Nn=1u(t)n(−ynh(xn))
∑
n
=
1
N
u
n
(
t
)
(
−
y
n
h
(
x
n
)
)
最小化,其中
h(xn)
h
(
x
n
)
是变量,进一步化简,
这里的推导说明,实际上最小化 EADA E A D A 相当于最小化 Eu(t)in E i n u ( t ) ,所以推来推去,我们发现了最好的 gt g t 实际上就是可以通过adaboost来解决的,即 gt+1 g t + 1 由 ut u t 和 gt g t 来获得,忘记的同学可以回到adaboost去查看。
得到最优的 gt g t 之后,接下来,我们要处理最优的步长,由上面的推导,我们能得出最优的步长就是 ln1−ϵtϵt−−−−√ l n 1 − ϵ t ϵ t !实在是震精!
Gradient Boosting for Regression
推广上面adaboost-DT的loss项,可以推广到一般形式,下面将考虑regression问题,即考虑squared-error。
按照上面的推导的话遇到了一个问题,如果要min只要直接取
h(xn)=+∞
h
(
x
n
)
=
+
∞
就好了,不过实际上
h(xn)
h
(
x
n
)
仅仅是代表一个方向而已(想一想GD),长度应该是由步长控制的,所以,我们尝试对
h(xn)
h
(
x
n
)
做点限制,增加一个
(h(xn)2)
(
h
(
x
n
)
2
)
项
通过配方,我们发现了一个惊人的事实,如果假设 h h 是线性的话,那么直接对做LR即可以得到一个最优解!
得到最优 h h <script type="math/tex" id="MathJax-Element-4724">h</script>之后,考虑步长,稍微做点代数边形,我们发现一个事实,最优的步长也是可以通过线性回归获得,而且是一元!
对算法重新总结一下即