基于并行
策略:基学习器之间不存在依赖关系,可同时生成。
基本思路:
自助采样法
对训练集随机采样,重复进行 T 次;自助采样法:对 m 个样本的训练集,有放回的采样 m 次;
此时,样本在 m 次采样中始终没被采样的概率约为 0.368,即每次自助采样只能采样到全部样本的 63% 左右。
特点:
高偏差
,但是聚合降低了偏差和方差
。所谓不稳定的学习器,指的是对样本分布较为敏感的学习器。
为什么不稳定的学习器更适合作为基学习器?
随机森林是bagging方法的典型应用,随机森林算法是以决策树算法为基础
,通过bagging算法采样训练样本
,再抽样特征
,3者组合成的算法。对应scikit-learn中为RandomForestClassifier (RandomForestRegression),它有着决策树(DecisionTreeClassifier)的所有参数,以及bagging(BaggingClassifier)的所有参数。
当处理高维(多特征)数据(例如: 图像)时,这种方法比较有用。同时对训练数据和特征进行抽样称为Random Patches,只针对特征抽样而不针对训练数据抽样是Random Subspaces。
随机的意义?
不管是对样本的随机采样,还是对特征的抽样,甚至对切分点的随机划分,都是为了引入偏差,使基分类器之间具有明显的差异,相互独立,提升模型的多样性,使模型不会受到局部样本的影响,从而减少方差,提升模型的泛化能力。
随机森林如何用于分类和回归?
分类
随机森林采用投票的方式实现分类,对于训练好的随机森林模型,输入数据后,每棵树都会输出对应的分类,最终模型输出的分类结果是预测结果出现最多的分类(多数投票,硬投票
)。
如果基分类器支持输出每个分类的概率,则可以采用软投票
的方式,对输入数据得到每个分类的预测概率,最终输出概率最大的分类。
回归
随机森林的基分类器采用回归树,给定输入数据,每棵树都会输出对应的预测结果,最终的预测结果为每棵树预测输出的平均值
。
基于串行
策略:基学习器之间存在依赖关系,新的学习器需要根据上一个学习器生成。
基本思路:
特点:
代表算法:
AdaBoost 算法还有另一个解释,即可以认为AdaBoost算法是模型为加法模型
、损失函数为指数函数
、学习算法为前向分步算法
时的二类分类学习方法。
AdaBoost如何用于分类和回归?
AdaBoost二元分类问题算法流程
输入为样本集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) T={(x_1,y_1),(x_2,y_2),...(x_m,y_m)} T=(x1,y1),(x2,y2),...(xm,ym),输出为 − 1 , + 1 {-1, +1} −1,+1,弱分类器算法, 弱分类器迭代次数K。
输出为最终的强分类器f(x)
(1)初始化样本集权重为
D ( 1 ) = ( w 11 , w 12 , . . . w 1 m ) ;      w 1 i = 1 m ;      i = 1 , 2... m D(1) = (w_{11}, w_{12}, ...w_{1m}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m D(1)=(w11,w12,...w1m);w1i=m1;i=1,2...m
(2)对于 k = 1 , 2 , . . . K k=1,2,...K k=1,2,...K:
\qquad a) 使用具有权重 D k D_k Dk的样本集来训练数据,得到弱分类器 G k ( x ) G_k(x) Gk(x)
\qquad b)计算 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\limits_{i=1}^{m}w_{ki}I(G_k(x_i) \neq y_i) ek=P(Gk(xi)̸=yi)=i=1∑mwkiI(Gk(xi)̸=yi)
\qquad c) 计算弱分类器的系数
α 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
\qquad d) 更新样本集的权重分布
w k + 1 , i = w k i Z K e x p ( − α k y i G k ( x i ) )      i = 1 , 2 , . . . m w_{k+1,i} = \frac{w_{ki}}{Z_K}exp(-\alpha_ky_iG_k(x_i)) \;\; i =1,2,...m wk+1,i=ZKwkiexp(−αkyiGk(xi))i=1,2,...m
这里 Z k Z_k Zk是规范化因子
Z k = ∑ i = 1 m w k i e x p ( − α k y i G k ( x i ) ) Z_k = \sum\limits_{i=1}^{m}w_{ki}exp(-\alpha_ky_iG_k(x_i)) Zk=i=1∑mwkiexp(−αkyiGk(xi))
(3)构建最终分类器为:
f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x ) ) f(x) = sign(\sum\limits_{k=1}^{K}\alpha_kG_k(x)) f(x)=sign(k=1∑KαkGk(x))
对于Adaboost多元分类算法,其实原理和二元分类类似,最主要区别在弱分类器的系数上。比如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回归问题的算法流程
输入为样本集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) T={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)} T=(x1,y1),(x2,y2),...,(xm,ym),弱学习器算法, 弱学习器迭代次数K。
输出为最终的强学习器 f ( x ) f(x) f(x)
(1)初始化样本集权重为
D ( 1 ) = ( w 11 , w 12 , . . . w 1 m ) ;      w 1 i = 1 m ;      i = 1 , 2... m D(1) = (w_{11}, w_{12}, ...w_{1m}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m D(1)=(w11,w12,...w1m);w1i=m1;i=1,2...m
(2)对于 k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K:
a) 使用具有权重 D k D_k Dk的样本集来训练数据,得到弱学习器 G k ( x ) G_k(x) Gk(x)
b) 计算训练集上的最大误差
E k = m a x ∣ y i − G k ( x i ) ∣    i = 1 , 2... m E_k= max|y_i - G_k(x_i)|\;i=1,2...m Ek=max∣yi−Gk(xi)∣i=1,2...m
c) 计算每个样本的相对误差:
如果是线性误差,则 e k i = ∣ y i − G k ( x i ) ∣ E k e_{k_i}= \frac{|y_i - G_k(x_i)|}{E_k} eki=Ek∣yi−Gk(xi)∣;
如果是平方误差,则 e k i = ( y i − G k ( x i ) ) 2 E k 2 e_{k_i}= \frac{(y_i - G_k(x_i))^2}{E_k^2} eki=Ek2(yi−Gk(xi))2;
如果是指数误差,则 e k i = 1 − e x p ( − ∣ y i − G k ( x i ) ∣ E k ) e_{k_i}= 1 - exp(\frac{-|y_i -G_k(x_i)|}{E_k}) eki=1−exp(Ek−∣yi−Gk(xi)∣)
d) 计算回归误差率
e k = ∑ i = 1 m w k i e k i e_k = \sum\limits_{i=1}^{m}w_{k_i}e_{k_i} ek=i=1∑mwkieki
c) 计算弱学习器的系数
α k = e k 1 − e k \alpha_k =\frac{e_k}{1-e_k} αk=1−ekek
d) 更新样本集的权重分布为
w k + 1 , i = w k i Z k α k 1 − e k i w_{k+1,i} = \frac{w_{k_i}}{Z_k}\alpha_k^{1-e_{k_i}} 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\limits_{i=1}^{m}w_{k_i}\alpha_k^{1-e_{k_i}} Zk=i=1∑mwkiαk1−eki
简单来说,Boosting 能提升弱分类器性能的原因是降低了偏差
;Bagging 则是降低了方差
;
Boosting 方法:
训练误差
(拟合残差或者加大错类的权重),加强模型的学习能力,从而减小偏差
;Bagging 方法:
参考:
《统计学习方法》 李航
https://www.cnblogs.com/pinard/p/6133937.html