探究算法细节,深入了解算法原理
1)如何计算学习误差率e?
2)如何得到弱学习器权重系数α?
3)如何更新样本权重D?
4)使用何种结合策略?
输入:
输出:
(1)初始化训练集样本权重
D 1 = ( w 11 , w 12 , . . . , w 1 m ) ; w 1 i = 1 m ; i = 1 , 2 , . . . , m D_1=\left(w_{11}, w_{12}, ... ,w_{1 m}\right) ; \quad w_{1 i}=\frac{1}{m} ; \quad i=1,2,..., m D1=(w11,w12,...,w1m);w1i=m1;i=1,2,...,m
(2)对于 k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K,使用具有权重 D k D_k Dk的训练集来训练模型,得到弱分类器 G k ( x ) G_k(x) Gk(x)
(3)计算 G k ( x ) G_k(x) Gk(x)的分类误差率
e k = P ( G k ( x i ) ≠ y i ) = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i ) e_k=P(G_k(x_i) \neq y_i)=\sum_{i=1}^{m}w_{ki}I(G_k(x_i) \neq y_i) ek=P(Gk(xi)̸=yi)=i=1∑mwkiI(Gk(xi)̸=yi)
e k = ∑ G k ( x i ) ≠ y i w k i , ∑ i = 1 m w k i = 1 e_k=\sum_{G_k(x_i)\neq y_i}w_{ki} \quad ,\quad \sum_{i=1}^{m}w_{ki}=1 ek=Gk(xi)̸=yi∑wki,i=1∑mwki=1
(4)计算弱分类器 G k ( x ) G_k(x) Gk(x)的权重系数
α k = 1 2 l o g 1 − e k e k \alpha_k=\frac{1}{2}log\frac{1-e_k}{e_k} αk=21logek1−ek
(5)更新训练集的权重分布
w k + 1 , i = w k i Z k e − α k y i G k ( x i ) i = 1 , 2 , . . . , m w_{k+1,i}=\frac{w_{ki}}{Z_k}e^{-\alpha_ky_iG_k(x_i)} \quad i=1,2,...,m wk+1,i=Zkwkie−αkyiGk(xi)i=1,2,...,m
其中 Z k Z_k Zk是规范因子:
Z k = ∑ i = 1 m w k i e − α k y i G k ( x i ) Z_k=\sum_{i=1}^{m}w_{ki}e^{-\alpha_ky_iG_k(x_i)} Zk=i=1∑mwkie−αkyiGk(xi)
即:
w k + 1 , i = w k i e − α k y i G k ( x i ) ∑ i = 1 m w k i e − α k y i G k ( x i ) i = 1 , 2 , . . . , m w_{k+1,i}=\frac{w_{ki}e^{-\alpha_ky_iG_k(x_i)}}{\sum_{i=1}^{m}w_{ki}e^{-\alpha_ky_iG_k(x_i)}} \quad i=1,2,...,m wk+1,i=∑i=1mwkie−αkyiGk(xi)wkie−αkyiGk(xi)i=1,2,...,m
(6)构建最终的强分类器
f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x ) ) f(x)=sign(\sum_{k=1}^{K}\alpha_kG_k(x)) f(x)=sign(k=1∑KαkGk(x))
多分类与二分类相似,主要区别在于弱分类器的系数 α k \alpha_k αk
AdaBoost SAMME算法,弱分类器的系数为:
α k = 1 2 l o g 1 − e k e k + l o g ( R − 1 ) \alpha_k=\frac{1}{2}log\frac{1-e_k}{e_k}+log(R-1) αk=21logek1−ek+log(R−1)
其中 R 为类别数,如果是二分类,R=2,与前面一致。
AdaBoost回归问题有很多变种,这里以 AdaBoost R2 算法为准。
(1)初始化训练集样本权重
D 1 = ( w 11 , w 12 , . . . , w 1 m ) ; w 1 i = 1 m ; i = 1 , 2 , . . . , m D_1=\left(w_{11}, w_{12}, ... ,w_{1 m}\right) ; \quad w_{1 i}=\frac{1}{m} ; \quad i=1,2,..., m D1=(w11,w12,...,w1m);w1i=m1;i=1,2,...,m
(2)对于 k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K,使用具有权重 D k D_k Dk的训练集来训练模型,得到弱学习器 G k ( x ) G_k(x) Gk(x)
(3)计算训练集上的最大误差
E k = m a x ∣ y i − G k ( x i ) ∣ E_k=max|y_i-G_k(x_i)| Ek=max∣yi−Gk(xi)∣
(4)计算每个训练集样本的相对误差
(5)计算回归误差率
e k = ∑ i = 1 m w k i e k i e_k=\sum_{i=1}^{m}w_{ki}e_{ki} ek=i=1∑mwkieki
(6)计算弱学习器系数
α k = e k 1 − e k \alpha_k=\frac{e_k}{1-e_k} αk=1−ekek
(7)更新训练集样本权重
w k + 1 , i = w k i Z k α k 1 − e k i w_{k+1,i}=\frac{w_{ki}}{Z_k}\alpha_k^{1-e_{ki}} wk+1,i=Zkwkiαk1−eki
这里 Z k Z_k Zk 是规范因子
Z k = ∑ i = 1 m w k i α k 1 − e k i Z_k=\sum_{i=1}^{m}w_{ki}\alpha_k^{1-e_{ki}} Zk=i=1∑mwkiαk1−eki
即
w k + 1 , i = w k i α k 1 − e k i ∑ i = 1 m w k i α k 1 − e k i w_{k+1,i}=\frac{w_{ki}\alpha_k^{1-e_{ki}}}{\sum_{i=1}^{m}w_{ki}\alpha_k^{1-e_{ki}}} wk+1,i=∑i=1mwkiαk1−ekiwkiαk1−eki
(8)构建最终的强学习器
f ( x ) = G k ∗ ( x ) f(x)=G_k^*(x) f(x)=Gk∗(x)
其中, G k ∗ ( x ) G_k^*(x) Gk∗(x) 是 l n 1 α k , k = 1 , 2 , . . . , K ln \frac{1}{\alpha_k},k=1,2,...,K lnαk1,k=1,2,...,K 中位数对应序号 k ∗ k^* k∗对应的弱学习器。
结合策略与分类问题不同,取权重中位数对应的弱学习器,作为最终的强学习器
【李航,统计机器学习 8.2节】
推论:如果存在 γ > 0 \gamma >0 γ>0,对所有 γ k ≥ γ \gamma_k \geq \gamma γk≥γ( γ k = 1 2 − e k \gamma_k=\frac{1}{2}-e_k γk=21−ek),则
1 m ∑ i = 1 m I ( G ( x i ) ≠ y i ) ≤ e − 2 K γ 2 \frac{1}{m}\sum_{i=1}^{m}I(G(x_i)\neq y_i) \leq e^{-2K\gamma^2} m1i=1∑mI(G(xi)̸=yi)≤e−2Kγ2
AdaBoost 算法不需要知道下界 γ \gamma γ,AdaBoost具有适应性,它能适应弱分类器各自的训练误差率,这是它的名称由来(适应的提升)
AdaBoost算法是模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题。
第 k − 1 k-1 k−1轮强学习器
f k − 1 ( x ) = ∑ i = 1 k − 1 α i G i ( x ) f_{k-1}(x)=\sum_{i=1}^{k-1}\alpha_iG_i(x) fk−1(x)=i=1∑k−1αiGi(x)
第 k k k轮强学习器
f k ( x ) = ∑ i = 1 k α i G i ( x ) f_{k}(x)=\sum_{i=1}^{k}\alpha_iG_i(x) fk(x)=i=1∑kαiGi(x)
即
f k ( x ) = f k − 1 ( x ) + α k G k ( x ) f_k(x)=f_{k-1}(x)+\alpha_kG_k(x) fk(x)=fk−1(x)+αkGk(x)
损失函数为指数函数
arg min ⎵ α , G ∑ i = 1 m exp ( − y i f k ( x ) ) \underbrace{\arg \min }_{\alpha, G} \sum_{i=1}^{m} \exp \left(-y_{i} f_{k}(x)\right) α,G argmini=1∑mexp(−yifk(x))
( α k , G k ( x ) ) = arg min ⎵ α , G ∑ i = 1 m exp [ ( − y i ) ( f k − 1 ( x ) + α G ( x ) ) ] \left(\alpha_{k}, G_{k}(x)\right)=\underbrace{\arg \min }_{\alpha, G} \sum_{i=1}^{m} \exp \left[\left(-y_{i}\right)\left(f_{k-1}(x)+\alpha G(x)\right)\right] (αk,Gk(x))=α,G argmini=1∑mexp[(−yi)(fk−1(x)+αG(x))]
令 w k i ′ = exp ( − y i f k − 1 ( x ) ) w_{k i}^{\prime}=\exp \left(-y_{i} f_{k-1}(x)\right) wki′=exp(−yifk−1(x)),它的值不依赖于 α , G \alpha, G α,G,因此与最小化无关,仅仅依赖于 f k − 1 ( x ) f_{k-1}(x) fk−1(x),随着每一轮的迭代而改变。
损失函数转化为:
( α k , G k ( x ) ) = arg min ⎵ α , G ∑ i = 1 m w k i ′ exp [ − y i α G ( x ) ] \left(\alpha_{k}, G_{k}(x)\right)=\underbrace{\arg \min }_{\alpha, G} \sum_{i=1}^{m} w_{k i}^{\prime} \exp \left[-y_{i} \alpha G(x)\right] (αk,Gk(x))=α,G argmini=1∑mwki′exp[−yiαG(x)]
(1)首先求 G k ( x ) G_k(x) Gk(x),可以得到:
G k ( x ) = arg min ⎵ G ∑ i = 1 m w k i ′ I ( y i ≠ G ( x i ) ) G_{k}(x)=\underbrace{\arg \min }_{G} \sum_{i=1}^{m} w_{k i}^{\prime} I\left(y_{i} \neq G\left(x_{i}\right)\right) Gk(x)=G argmini=1∑mwki′I(yi̸=G(xi))
(2)将 G k ( x ) G_k(x) Gk(x) 带入损失函数,并对 α \alpha α 求导,使其等于0,可以得到
α k = 1 2 log 1 − e k e k \alpha_{k}=\frac{1}{2} \log \frac{1-e_{k}}{e_{k}} αk=21logek1−ek
(3)其中, e k e_k ek 为前面的分类误差率
e k = ∑ i = 1 m w k i ′ I ( y i ≠ G ( x i ) ) ∑ i = 1 m w k i ′ = ∑ i = 1 m w k i I ( y i ≠ G ( x i ) ) e_{k}=\frac{\sum_{i=1}^{m} w_{k i}^{\prime} I\left(y_{i} \neq G\left(x_{i}\right)\right)}{\sum_{i=1}^{m} w_{k i}^{\prime}}=\sum_{i=1}^{m} w_{k i} I\left(y_{i} \neq G\left(x_{i}\right)\right) ek=∑i=1mwki′∑i=1mwki′I(yi̸=G(xi))=i=1∑mwkiI(yi̸=G(xi))
(4)样本权重更新
由 f k ( x ) = f k − 1 ( x ) + α k G k ( x ) f_{k}(x)=f_{k-1}(x)+\alpha_{k} G_{k}(x) fk(x)=fk−1(x)+αkGk(x) 和 w k i ′ = exp ( − y i f k − 1 ( x ) ) \mathbb{w}_{k i}^{\prime}=\exp \left(-y_{i} f_{k-1}(x)\right) wki′=exp(−yifk−1(x)) 可得
w k + 1 , i ′ = w k i ′ exp [ − y i α k G k ( x ) ] w_{k+1, i}^{\prime}=w_{k i}^{\prime} \exp \left[-y_{i} \alpha_{k} G_{k}(x)\right] wk+1,i′=wki′exp[−yiαkGk(x)]
为了防止过拟合,加入正则化,称为步长(learning rate),定义为 v v v
f k ( x ) = f k − 1 ( x ) + ν α k G k ( x ) f_{k}(x)=f_{k-1}(x)+\nu \alpha_{k} G_{k}(x) fk(x)=fk−1(x)+ναkGk(x)
w 1 i = 1 m w_{1 i}=\frac{1}{m} w1i=m1
e k = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i ) e_k=\sum_{i=1}^{m}w_{ki}I(G_k(x_i) \neq y_i) ek=i=1∑mwkiI(Gk(xi)̸=yi)
α k = 1 2 l o g 1 − e k e k \alpha_k=\frac{1}{2}log\frac{1-e_k}{e_k} αk=21logek1−ek
w k + 1 , i = w k i Z k e − α k y i G k ( x i ) , Z k = ∑ i = 1 m w k i e − α k y i G k ( x i ) w_{k+1,i}=\frac{w_{ki}}{Z_k}e^{-\alpha_ky_iG_k(x_i)} ,\quad Z_k=\sum_{i=1}^{m}w_{ki}e^{-\alpha_ky_iG_k(x_i)} wk+1,i=Zkwkie−αkyiGk(xi),Zk=i=1∑mwkie−αkyiGk(xi)
f k ( x ) = f k − 1 ( x ) + ν α k G k ( x ) f_{k}(x)=f_{k-1}(x)+\nu \alpha_{k} G_{k}(x) fk(x)=fk−1(x)+ναkGk(x)
f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x ) ) f(x)=sign(\sum_{k=1}^{K}\alpha_kG_k(x)) f(x)=sign(k=1∑KαkGk(x))
使用最广泛的Adaboost弱学习器是决策树和神经网络。
对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。
Adaboost的主要优点有:
Adaboost的主要缺点有:
class sklearn.ensemble.AdaBoostClassifier(base_estimator=None,
n_estimators=50, learning_rate=1.0, algorithm=’SAMME.R’, random_state=None)
class sklearn.ensemble.AdaBoostRegressor(base_estimator=None,
n_estimators=50, learning_rate=1.0, loss=’linear’, random_state=None)
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2,
min_samples_split=20, min_samples_leaf=5),
algorithm="SAMME",
n_estimators=200, learning_rate=0.8)
bdt.fit(X, y)
弱学习器为决策树时,可调 max_features,max_depth,min_sample_splits等
参考博客:
1. 李航. 统计学习方法 第8章 提升方法
2. 集成学习之Adaboost算法原理小结
3. sklearn adaboost文档
4. sklearn adaboost源码