集成学习
集成学习通过构建结合多个学习器来完成任务,通常可以获得比单个学习器显著优越的泛化性能。
集成个体应该好而不同
![](https://i-blog.csdnimg.cn/blog_migrate/0019d183abfc6c29b9cb5a6822d4f95a.jpeg)
Boosting 和Bagging
- Boosting:个体学习器之间存在强依赖关系,必须串行生成的序列化方法,典型代表是adaboost。从偏差-方差的角度来分析,Boosting方法主要关注降低偏差。
- Bagging:个体学习器之间不存在强依赖性,可同时生成的并行化方法,典型代表是Bagging和随机森林。Bagging主要关注于降低方差。Bagging方法每次对样本进行自助采样,随机森林在对样本采样的基础上引入随机属性选择。
Adaboost
Adaboost是Boosting方法的典型代表,将一系列的弱学习器组合成为强学习器,其基本思想是根据上一个弱分类器的分类结果,给予误分类样本更多的权重驯练当前的分类器,直至训练器达到既定的数目T,最终的决策函数为这T个弱分类器
ht(x)
h
t
(
x
)
的加权(
αt
α
t
)组合,准确率越高的分类器权重越大:
给定训练集
(xi,yi)
(
x
i
,
y
i
)
,
yi∈{−1,1},i=1,⋯,n
y
i
∈
{
−
1
,
1
}
,
i
=
1
,
⋯
,
n
Adaboost训练的算法为:
- 初始化样本权重, w1,i=1n w 1 , i = 1 n
- for t=1:T
- 根据带权重 wt,i w t , i 的样本训练弱分类器 ht(x) h t ( x )
- 计算该分类器在权重
wt
w
t
下的错误率
ϵt=∑iwt,iI(yi≠ht(xi))∑iwt,i ϵ t = ∑ i w t , i I ( y i ≠ h t ( x i ) ) ∑ i w t , i
- 计算该弱分类器的权重
αt=12ln1−ϵtϵt α t = 1 2 l n 1 − ϵ t ϵ t - 更新训练样本的权重
wt+1,i=wt,iexp(−αtyiht(xi))Zt w t + 1 , i = w t , i e x p ( − α t y i h t ( x i ) ) Z t
其中 Zt Z t 为归一化系数,使得 ∑iwt+1,i=1 ∑ i w t + 1 , i = 1
最后得到的强分类器为:
Adaboost其实是最小化指数损失函数。
对 H(x) H ( x ) 求偏导:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/51d755de3780ee5988e780cac45a39f1.jpeg)
Adaboost证明
将 wT+1 w T + 1 迭代展开
wT+1,i=wT,iexp(−αTyihT(xi))ZT=wT−1,iexp(−αT−1yihT−1(xi))ZT−1exp(−αTyihT(xi))ZT=wT−1,iexp(−αT−1yihT−1(xi)−αTyihT(xi))ZTZT−1=⋯=w1,iexp(−yi∑Tt=1αtht(xi))∏Tt=1Zt=w1,iexp(−yiH(xi))∏Tt=1Zt w T + 1 , i = w T , i e x p ( − α T y i h T ( x i ) ) Z T = w T − 1 , i e x p ( − α T − 1 y i h T − 1 ( x i ) ) Z T − 1 e x p ( − α T y i h T ( x i ) ) Z T = w T − 1 , i e x p ( − α T − 1 y i h T − 1 ( x i ) − α T y i h T ( x i ) ) Z T Z T − 1 = ⋯ = w 1 , i e x p ( − y i ∑ t = 1 T α t h t ( x i ) ) ∏ t = 1 T Z t = w 1 , i e x p ( − y i H ( x i ) ) ∏ t = 1 T Z t
因为 ∑iwT+1,i=1 ∑ i w T + 1 , i = 1
∏t=1TZt=w1,i∑iexp(−yiH(xi))=1n∑iexp(−yiH(xi)) ∏ t = 1 T Z t = w 1 , i ∑ i e x p ( − y i H ( x i ) ) = 1 n ∑ i e x p ( − y i H ( x i ) )训练误差
Errtrain(H(x))=1n∑i=1nl0/1(yiH(xi))≤1n∑i=1nlexp(yiH(xi))=∏t=1TZt E r r t r a i n ( H ( x ) ) = 1 n ∑ i = 1 n l 0 / 1 ( y i H ( x i ) ) ≤ 1 n ∑ i = 1 n l e x p ( y i H ( x i ) ) = ∏ t = 1 T Z t
从另一个角度看Adaboost:
前向逐步递增(Forward Stagewise Additive Model )
要找到最优的模型很难,可以每次递增
- 损失函数: L(y,f(x)) L ( y , f ( x ) )
- 目标函数: min1n∑ni=1L(yi,f(xi)) min 1 n ∑ i = 1 n L ( y i , f ( x i ) )
- 前向逐步递增:
- 初始化: f0(x)=1nargminf∑ni=1L(yi,f0(xi)) f 0 ( x ) = 1 n a r g m i n f ∑ i = 1 n L ( y i , f 0 ( x i ) )
- fm(x)=fm−1(x)+αmϕm(x) f m ( x ) = f m − 1 ( x ) + α m ϕ m ( x )
- (αm,ϕm)=1nargminα,ϕ∑ni=1L(yi,fm−1(x)+αmϕm(x)) ( α m , ϕ m ) = 1 n a r g m i n α , ϕ ∑ i = 1 n L ( y i , f m − 1 ( x ) + α m ϕ m ( x ) )
Adaboost其实是在最小化指数损失函数
第
m
m
步,最小化
选择 ϕm ϕ m 使得错误率最小
如果损失函数选择L2损失,则称为L2 Boosting
在第m步,损失函数的形式为:
其中 rm,i=yi−fm−1(xi) r m , i = y i − f m − 1 ( x i )
Gradient Boosting
用一个弱学习器去学习当前状态下损失函数的负梯度
XGboost: eXtreme Gradient Boosting
- 损失函数采用泰勒展开二阶近似:
- Gradient Boosting虽然对常见的损失函数适用,但除了L2损失,其他损失函数的推导比较复杂
- 加入正则化:叶子节点数目,叶子节点分数
- 先建完全树后剪枝
泰勒公式展开
定理:
设 n 是一个正整数。如果定义在一个包含 a 的区间上的函数 f 在 a 点处 n+1 次可导,那么对于这个区间上的任意 x,都有:
f(x)=f(a)+f′(a)1!(x−a)+f′′(a)2!(x−a)2+⋯+f(n)(x)n!(x−a)n+Rn(x) f ( x ) = f ( a ) + f ′ ( a ) 1 ! ( x − a ) + f ″ ( a ) 2 ! ( x − a ) 2 + ⋯ + f ( n ) ( x ) n ! ( x − a ) n + R n ( x )
其中的多项式称为函数在 a a 处的泰勒展开式,剩余的 Rn(x) R n ( x ) 是泰勒公式的余项,是 (x−a)n ( x − a ) n 的高阶无穷小。
ex e x 的泰勒展开:
ex≈1+x+x22!+⋯+xnn! e x ≈ 1 + x + x 2 2 ! + ⋯ + x n n !
参考资料
周志华 机器学习
Boosting algorithm: AdaBoost