机器学习:决策树与集成学习 2

集成学习

Bagging

Boosting aggregating, 基于基学习器进行投票,并行。

Boosting

对基学习器的预测结果进行加权,串行。

Stacking

每个基模型,对每个样本进行预测,将预测值作为特征,形成新的训练集。

集成学习的偏差与方差

偏差

基模型输出均值与真实值之间的差异,主要体现在Boosting方法中。

方差

基模型输出的方差,主要体现在在Bagging方法中。

m m m个基模型的期望为 μ \mu μ,方差为 σ 2 \sigma^2 σ2,模型权重 r r r,两两模型之间的相关系数为 ρ \rho ρ相等。
Bagging和Boosting的基模型都是线性组成的。
基模型的总体期望为:
E ( F ) = E ( ∑ i m r i f i ) = ∑ i m r i E ( f i ) E(F)=E(\sum_{i}^{m}r_if_i)=\sum_{i}^{m}r_iE(f_i) E(F)=E(imrifi)=imriE(fi)

注:
随机变量x, y的相关系数为 ρ \rho ρ, 协方差为 c o v ( x , y ) = 1 n ∑ i n ( x i − μ x ) ( y i − μ y ) cov(x,y)=\frac{1}{n}\sum_i^n(x_i-\mu_x)(y_i-\mu_y) cov(x,y)=n1in(xiμx)(yiμy), 标准差为 s t d ( x ) = v a r ( x ) std(x)=\sqrt{var(x)} std(x)=var(x) ,则x, y的相关系数就是归一化之后的协方差,即: ρ = c o v ( x , y ) v a r ( x ) v a r ( y ) \rho=\frac{cov(x,y)}{\sqrt{var(x)}\sqrt{var(y)}} ρ=var(x) var(y) cov(x,y), 该关系式在下面的公式推导中会使用到。

模型总体的方差(m个基模型输出的方差)为:
预测结果 y i = ∑ i m r i f i y_i=\sum_{i}^{m}r_if_i yi=imrifi为随机变量,模型总体的方差就是随机变量 y i y_i yi的方差。
V a r ( F ) Var(F) Var(F)
= V a r ( y i ) =Var(y_i) =Var(yi)
= V a r ( ∑ i m r i f i ) =Var(\sum_{i}^{m}r_if_i) =Var(imrifi)
= ∑ i m V a r ( r i f i ) + ∑ i ≠ j m C o v ( r i f i , r j f j ) =\sum_{i}^{m}Var(r_if_i)+\sum_{i\neq j}^{m}Cov(r_if_i, r_jf_j) =imVar(rifi)+i=jmCov(rifi,rjfj)
= ∑ i m r i 2 V a r ( f i ) + ∑ i ≠ j m ρ i r i r j V a r ( f i ) V a r ( f j ) =\sum_i^mr_i^2Var(f_i)+\sum_{i\neq j}^{m}\rho_ir_ir_j\sqrt{Var(f_i)}\sqrt{Var(f_j)} =imri2Var(fi)+i=jmρirirjVar(fi) Var(fj)
= m r 2 σ 2 + m ( m − 1 ) r 2 σ 2 ρ =mr^2\sigma^2+m(m-1) r^2\sigma^2\rho =mr2σ2+m(m1)r2σ2ρ
= m r 2 σ 2 + m 2 r 2 σ 2 ρ − m r 2 σ 2 ρ =mr^2\sigma^2+m^2 r^2\sigma^2\rho-m r^2\sigma^2\rho =mr2σ2+m2r2σ2ρmr2σ2ρ
= m r 2 σ 2 ( 1 − ρ ) + m 2 r 2 σ 2 ρ =mr^2\sigma^2(1-\rho)+m^2r^2\sigma^2\rho =mr2σ2(1ρ)+m2r2σ2ρ

模型的准确度:
E r r o r = b i a s 2 + v a r + ζ Error=bias^2+var+\zeta Error=bias2+var+ζ

Bagging的偏差与方差

Bagging是有放回的重复采样,每一个基模型使用的数据子集是从同一个数据集中采样得到的。
在Bagging算法中,m个基模型,设均值为 E ( f ) = μ E(f)=\mu E(f)=μ, 方差为 σ 2 \sigma^2 σ2,每个基模型的权重为 r i = 1 m r_i=\frac{1}{m} ri=m1,

此时,模型总体的期望为:
E ( F ) = E ( ∑ i m r i f i ) = ∑ i m E ( r i f i ) = ∑ i m r i E ( f i ) = ∑ i m 1 m μ = m ∗ 1 m μ = μ E(F)=E(\sum_{i}^{m}r_if_i) = \sum_{i}^{m}E(r_if_i)=\sum_{i}^{m}r_iE(f_i)=\sum_{i}^{m}\frac{1}{m}\mu=m*\frac{1}{m}\mu=\mu E(F)=E(imrifi)=imE(rifi)=imriE(fi)=imm1μ=mm1μ=μ
因此,模型整体的期望等于基模型的期望,在实际使用中,更倾向于选择强基模型。bagging中模型整体的期望可以写成强基模型的期望,但是在boosting算法中,模型整体的期望并不能写成弱基模型的期望,下面再次提到。

此时,模型的方差为:
V a r ( F ) Var(F) Var(F)
= m r 2 σ 2 ( 1 − ρ ) + m 2 r 2 σ 2 ρ =m r^2 \sigma^2 (1-\rho)+m^2 r^2 \sigma^2 \rho =mr2σ2(1ρ)+m2r2σ2ρ
= m ∗ ( 1 m ) 2 σ 2 ( 1 − ρ ) + m 2 ( 1 m ) 2 σ 2 ρ =m*{(\frac{1}{m})}^2 \sigma^2 (1-\rho)+m^2 {(\frac{1}{m})}^2 \sigma^2 \rho =m(m1)2σ2(1ρ)+m2(m1)2σ2ρ
= 1 m σ 2 ( 1 − ρ ) + σ 2 ρ =\frac{1}{m} \sigma^2 (1-\rho)+ \sigma^2\rho =m1σ2(1ρ)+σ2ρ
因此,模型数量m增加时,模型整体的方差在减小,因此说,Bagging算法减小的是模型的方差。并且,基模型之前尽量呈现弱相关性,即 ρ \rho ρ的取值要尽量小。
从偏差-方差分解的角度,bagging主要关注降低模型的方差。

Boosting的偏差与方差

Boosting的每一个基模型使用的是同一个训练数据集,并且基模型之间的训练顺序是串行的,基模型之间具有强相关性,因此,我们将基模型之间的相关系数设置为 ρ = 1 \rho=1 ρ=1设每个基模型权重为:$r_i=\frac{1}{m}$1

模型总体的期望为:
E ( F ) = ∑ i m r i E ( f i ) E(F)=\sum_{i}^{m} r_i E(f_i) E(F)=imriE(fi)
模型总体的方差为:
V a r ( F ) Var(F) Var(F)
= m r 2 σ 2 ( 1 − ρ ) + m 2 r 2 σ 2 ρ =m r^2 \sigma^2 (1-\rho)+m^2 r^2 \sigma^2 \rho =mr2σ2(1ρ)+m2r2σ2ρ
$=\frac{1}{m} \sigma^2 (1-\rho)+ \sigma^2\rho$1
$=\sigma^2$1

观察公式,我们可以看到,此时模型整体的方差等于基模型的方差,因此
boosting中基模型为弱模型就可以了。由于模型最终整体的输出结果是由弱基模型的输出累加得到的,boosting算法常采用前向加性模型,可以理解为残差逼近思想。

从偏差-方差分解的角度,boosting主要关注降低偏差。

随机森林 Random Forest

随机森林是bagging的一个扩展和变体,bagging算法中,每一个基学习器的训练集是从数据集中随机采样获得的数据子集,随机森林在该基础之上,当基模型为决策树时,在决策树的生成过程中,节点属性的选择并不是直接选择最优属性进行节点划分,而是先随机选择一个属性子集(特征子集),再在该属性子集中选择一个最优属性进行节点的分裂。即随机森林中同时引入了样本扰动和属性扰动。

优点

  1. 在数据集上的表现一般由于bagging方法。
  2. 易于并行化,在大数据集上有很大的优势。
  3. 能够处理高维数据集。

AdaBoost

Adaptive Boosting
boosting类算法中最经典的一个算法,最初标准的AdaBoost算法只能用于二分类任务。
Adaboost的核心是加法模型(即基学习器的线性组合),是一个前向分步学习算法。
第k轮训练的强基学习器为: F k ( x ) = F k − 1 ( x ) + α k f k ( x ) F_k(x)=F_{k-1}(x)+ \alpha_k f_k(x) Fk(x)=Fk1(x)+αkfk(x)
标准adaboost的损失函数定义为N个样本的指数损失函数: L ( y , F ) = ∑ i = 1 N e x p ( − y i F k ( x i ) ) L(y,F)=\sum_{i=1}^{N}exp(-y_i F_k(x_i)) L(y,F)=i=1Nexp(yiFk(xi)),这是所有样本在第k个基学习器上的损失函数
指数损失函数的二阶泰勒展开与交叉熵损失函数是等价的。
第k轮训练时,所有k个基学习器的损失函数为:
L ( y , F ) = ∑ i = 1 N e x p [ ( − y i ) ( F k − 1 ( x i ) + α k f k ( x i ) ) ] L(y,F)=\sum_{i=1}^{N} exp[(-y_i) (F_{k-1}(x_i) + \alpha_k f_k(x_i))] L(y,F)=i=1Nexp[(yi)(Fk1(xi)+αkfk(xi))]
= ∑ i = 1 N e x p [ − y i F k − 1 ( x i ) − y i α k f k ( x i ) ] =\sum_{i=1}^{N} exp[-y_i F_{k-1}(x_i) -y_i \alpha_k f_k(x_i)] =i=1Nexp[yiFk1(xi)yiαkfk(xi)]
= ∑ i = 1 N [ e x p ( − y i F k − 1 ( x i ) ) ∗ e x p ( − y i α k f k ( x i ) ) ] =\sum_{i=1}^{N} [exp(-y_i F_{k-1}(x_i)) *exp(-y_i \alpha_k f_k(x_i))] =i=1N[exp(yiFk1(xi))exp(yiαkfk(xi))]
在训练第k个基学习器 f k f_k fk时,前k-1个基学习器 F k − 1 = ∑ i = 1 k − 1 α i f i F_{k-1}=\sum_{i=1}^{k-1} \alpha_i f_i Fk1=i=1k1αifi是固定的,因此这部分的损失函数 ∑ i = 1 N e x p ( − y i F k − 1 ( x i ) ) \sum_{i=1}^{N}exp(-y_i F_{k-1}(x_i)) i=1Nexp(yiFk1(xi))也是固定的,我们将其看作一个系数 w k , i w_{k,i} wk,i,这样,前面的损失函数可以进一步写成:
L ( y , F ) = ∑ i = 1 N w k , i e x p ( − y i α k f k ( x i ) ) L(y,F)=\sum_{i=1}^{N} w_{k,i} exp(-y_i \alpha_k f_k(x_i)) L(y,F)=i=1Nwk,iexp(yiαkfk(xi))
第k步需要优化的是基学习器 f k f_k fk,具体的,我们通过优化分类器的权重系数 α k \alpha_k αk来最小化损失函数。
我们先将损失函数写成下面的形式,忽略掉常系数 w k , i w_{k,i} wk,i,并对所有样本的损失计算均值:
L ( y , F ) = E x ∼ D [ e x p ( − y i α k f k ( x i ) ) ] L(y,F)=E_{x\sim D} [exp(-y_i \alpha_k f_k(x_i))] L(y,F)=ExD[exp(yiαkfk(xi))]
= E x ∼ D [ e x p ( − α k I ( y i = f k ( x i ) ) + e x p ( α k I ( y i ≠ f k ( x i ) ) ] =E_{x\sim D}[exp(-\alpha_k \mathbb{I} (y_i=f_k(x_i)) + exp(\alpha_k \mathbb{I} (y_i \neq f_k(x_i)) ] =ExD[exp(αkI(yi=fk(xi))+exp(αkI(yi=fk(xi))]
= e x p ( − α k ) P x ∼ D ( y i = f k ( x i ) ) + e x p ( α k ) P x ∼ D ( y i ≠ f k ( x i ) ) =exp(-\alpha_k)P_{x\sim D}(y_i=f_k(x_i)) +exp(\alpha_k)P_{x\sim D}(y_i \neq f_k(x_i)) =exp(αk)PxD(yi=fk(xi))+exp(αk)PxD(yi=fk(xi))
其中, P x ∼ D ( y i ≠ f k ( x i ) ) P_{x\sim D}(y_i \neq f_k(x_i)) PxD(yi=fk(xi))表示错误率,我们将其写为 ϵ k \epsilon_k ϵk,上面的公式可以进一步写成:
L ( y , F ) = e x p ( − α k ) ∗ ( 1 − ϵ k ) + e x p ( α k ) ∗ ϵ k = L ( y , α k f k ) L(y,F)=exp(-\alpha_{k})*(1-\epsilon_{k})+exp(\alpha_{k})*\epsilon_k=L(y,\alpha_kf_k) L(y,F)=exp(αk)(1ϵk)+exp(αk)ϵk=L(y,αkfk)
于是,理想的基学习器为: f k ( x ) = a i g m i n α k L ( y , F ) = a i g m i n α k L ( y , α k f k ) f_k(x)=aigmin_{\alpha_k}L(y,F)=aigmin_{\alpha_k}L(y,\alpha_kf_k) fk(x)=aigminαkL(y,F)=aigminαkL(y,αkfk)
然后,我们将损失函数对 α k \alpha_k αk求偏导数:
L ( y , α k f k ) = e x p ( − α k ) ∗ ( 1 − ϵ k ) + e x p ( α k ) ∗ ϵ k L(y,\alpha_kf_k)=exp(-\alpha_{k})*(1-\epsilon_{k})+exp(\alpha_{k})*\epsilon_k L(y,αkfk)=exp(αk)(1ϵk)+exp(αk)ϵk
∂ L ( y , α k f k ) α k = − e x p ( − α k ) ∗ ( 1 − ϵ k ) + e x p ( α k ) ∗ ϵ k = 0 \frac{\partial L(y,\alpha_kf_k)}{\alpha_k}=-exp(-\alpha_{k})*(1-\epsilon_{k})+exp(\alpha_{k})*\epsilon_k=0 αkL(y,αkfk)=exp(αk)(1ϵk)+exp(αk)ϵk=0
e x p ( − α k ) ∗ ( 1 − ϵ k ) = e x p ( α k ) ∗ ϵ k exp(-\alpha_{k})*(1-\epsilon_{k})=exp(\alpha_{k})*\epsilon_k exp(αk)(1ϵk)=exp(αk)ϵk
1 − ϵ k ϵ k = e x p ( α k ) e x p ( − α k ) \frac{1-\epsilon_{k}}{\epsilon_k}=\frac{exp(\alpha_{k})}{exp(-\alpha_{k})} ϵk1ϵk=exp(αk)exp(αk)
取对数可得:
l n ( 1 − ϵ k ϵ k ) = l n ( e x p ( α k ) e x p ( − α k ) ) = l n ( e x p ( α k ) ) − l n ( e x p ( − α k ) ) = 2 α k ln(\frac{1-\epsilon_{k}}{\epsilon_k})=ln(\frac{exp(\alpha_k)}{exp(-\alpha_k)})=ln(exp(\alpha_k))-ln(exp(-\alpha_k))=2\alpha_k ln(ϵk1ϵk)=ln(exp(αk)exp(αk))=ln(exp(αk))ln(exp(αk))=2αk
即:
α k = 1 2 l n ( 1 − ϵ k ϵ k ) \alpha_k=\frac{1}{2} ln(\frac{1-\epsilon_k}{\epsilon_k}) αk=21ln(ϵk1ϵk)
这样,我们就得到了第k个基学习器的权重 α k \alpha_k αk,也是样本权重更新公式中的 α k \alpha_k αk

为了避免adaboost出现过拟合现象,可以在学习的过程中引入正则化项,称为步长 μ \mu μ,或者学习率。
F k = F k − 1 + μ α k f k ( x ) F_k=F_{k-1}+\mu\alpha_kf_k(x) Fk=Fk1+μαkfk(x), 0 < μ < 1 0<\mu<1 0<μ<1
μ \mu μ较小,则需要较多的迭代次数,用步长 μ \mu μ和最大迭代次数k来确定拟合效果。

Adaboost优点:

  1. 精度高。
  2. 可以利用各种回归/分类基学习器,非常灵活。
  3. 不易过拟合。

Adaboost 缺点:对异常点敏感,异常点往往会有较高的权重。

GBDT

Gradient Boosting Decision Tree
梯度提升决策树,其核心思想是基于决策树预测的残差进行迭代的学习。是boosting中的一大类算法,泛化能力较强的算法。

GBDT是回归树,所有树的结果累加作为最终结果。回归树在进行节点分裂时,穷举每个特征的每一个阈值,从而找到最好的分割点。
衡量标准:最小化均方误差
模型预测值: F k ( x ) = ∑ i = 1 K α i f i ( x ) F_k(x)=\sum_{i=1}^{K} \alpha_i f_i(x) Fk(x)=i=1Kαifi(x),通过残差逼近的思想对训练数据进行拟合。
每次只训练一个基模型: F k ( x ) = F k − 1 ( x ) + α k f k ( x ) F_k(x)=F_{k-1}(x)+ \alpha_k f_k(x) Fk(x)=Fk1(x)+αkfk(x)
Gradient体现在哪里呢?残差是最小均方损失函数关于预测值的反向梯度,即:
− ∂ ( 1 2 ( y − F k ( x ) ) 2 ) ∂ F k ( x ) = y − F k ( x ) -\frac{\partial(\frac{1}{2}(y-F_k(x))^2)}{\partial F_k(x)}=y-F_k(x) Fk(x)(21(yFk(x))2)=yFk(x)
上面等式的左边是损失函数的负梯度信息,右边则表示残差,该残差是基于当前预测值得到的。

由于GBDT是boosting算法中的一种,同其他boosting算法一样,GBDT容易对异常点敏感,从减小异常点的损失函数大小的角度出发,我们可以使用绝对损失或者Huber损失代替均方损失。
在GBDT中,分错样本会带来较大的损失信息,即较大的损失函数负梯度信息,所以,GBDT的每一步残差计算会变相增大被分错样本的权重,而对正确样本的权重趋于0,这也是为什么GBDT属于boosting算法的原因之一。

GBDT的优点:

  1. 自动进行特征组合,拟合非线性数据。
  2. 可以灵活处理各种类型的数据。

GBDT的缺点:对异常点敏感。

GBDT与Adaboost的对比:

  1. 相同点:
    (1)都是boosting家族的算法,基分类器都是选用弱分类器。
    (2)都是前向分步算法,或者说可以使用前向分步算法解释。
  2. 不同点:
    (1)迭代思想不同,
    adaboost在每一轮迭代过程中,直接提升错分样本的权重,
    GBDT则是基于损失函数的负梯度信息进行迭代训练和优化,每一步优化的损失函数的负梯度信息,基于残差进行计算,实际上每一轮优化基于残差进行优化时,变相的增大了错分样本的权重。
    (2)损失函数不同,
    标准adaboost适用于二分类问题,基于指数损失函数进行优化,
    GBDT是基于残差进行优化的,残差的计算是基于均方损失函数进行的,为了减小异常点对模型的影响,可以使用绝对损失或者Huber损失代替均方损失,多分类问题中,可以使用交叉熵损失函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值