机器学习---集成学习(三个臭皮匠顶个诸葛亮)

基本思路

群体智慧:如果能从所有的科学家中选择一群科学家组成一个团队,并且团队中的每个科学家都略强于随机选择的一个科学家,那么有理由相信这个科学家团队能比单个科学家做出更好的决定。
这样的群体智慧用到机器学习的学习器上也成立,集合多个个体学习器的方法称为集成学习
目前集成学习主要分成两大流派:

  • bagging
  • boosting

1 bagging

一棵树是决策树,多棵树是随机森林,解决决策树泛化能力不足的缺点
随机森林:

  • 随机选择样本
  • 随机选择特征

而且是有放回的随机抽样:自主采样法(bootstap sampling)
分类器并行。
在这里插入图片描述
投票法:少数服从多数

2 boosting(提升)

自适应地改变训练样本的分布,使得弱分类器聚焦到那些很难分类的样本上。它的做法是每一个训练样本赋予一个权重,在每一轮训练结束后自动地调整权重。
弱分类器是串行的,因此是个迭代的过程。
在这里插入图片描述

  • adaboost:boosting + 决策树
  • GBDT:梯度提 升树
  • XGBoost:

2.1 结合策略

多个学习器并不是简单的拼凑在一起,而是有策略的组合在一起,机器学习是靠数据驱动的,因此通过训练集就能找到能让每个学习器发挥最大效果的策略组合。
常用的组合策略有:

2.1.1 平均法

算术平均
加权平均
H ( x ) = 1 / n ∑ i = 1 n w i h i s . t . w I ≥ 0 , ∑ i = 1 n w i = 1 H(x)=1/n\sum_{i=1}^{n}w_ih_i \\ s.t. w_I \geq0,\sum_{i=1}^{n}w_i=1 H(x)=1/ni=1nwihis.t.wI0,i=1nwi=1

2.2.2 投票法

分类常用

  • 相对多数投票法:少数服从多数
  • 绝对多数投票法:投票数过半数
  • 加权投票法:权重

2.2.3 学习法

代表:stacking
对结果再加一层学习器,将训练集弱学习器的学习结果作为输入,训练集的输出作为输出,重新训练一个学习器来得到最终结果。
kaggle中一般用学习法。

2.2 Adaboost (adaptive boosting)

Adaboost 被认为是模型为加法模型,损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。

2.2.1 加法模型

加法模型可以看作模型是一系列基函数的线性组合。
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum_{m=1}^{M}\beta_mb(x;\gamma_m) f(x)=m=1Mβmb(x;γm)

b ( x ; γ m ) b(x;\gamma_m) b(x;γm)是基函数, γ m \gamma_m γm是基函数的参数, β m \beta_m βm是基函数的系数。

2.2.2 损失函数

指数函数
L ( y , f ( x ) ) = e x p ( − y f ( x ) ) L(y,f(x)) = exp(-yf(x)) L(y,f(x))=exp(yf(x))

我们总是希望损失函数极小化:
m i n β m , γ m ∑ i = 1 N L ( y i , f ( x i ) ) = m i n β m , γ m ∑ i = 1 N L ( y i , ∑ i = 1 M β m b ( x i ; γ m ) ) \underset{\beta_m,\gamma_m}{min}\quad\sum_{i=1}^{N}L(y_i,f(x_i))\\ =\underset{\beta_m,\gamma_m}{min}\quad \sum_{i=1}^{N}L(y_i,\sum_{i=1}^{M}\beta_mb(x_i;\gamma_m)) βm,γmmini=1NL(yi,f(xi))=βm,γmmini=1NL(yi,i=1Mβmb(xi;γm))

2.2.3 前向分布算法

通常上面的损失函数是一个复杂的优化问题。但因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数项,就可以简化优化的复杂度。
具体每步只需要优化如下的损失函数:

  1. 初始化模型 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0;

  2. 对每个样本 f o r m = 1 , 2 , . . . M for\quad m = 1,2,...M form=1,2,...M

    • 极小化损失函数
      a r g    m i n β m , γ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x ; γ ) ) ) \underset{\beta_m,\gamma_m}{arg\;min}\sum_{i=1}^{N}L(y_i,f_{m-1}(x_i)+\beta b(x_;\gamma))) βm,γmargmini=1NL(yi,fm1(xi)+βb(x;γ)))

    • 更新加法模型 f m ( x ) f_m(x) fm(x)
      f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta_mb(x;\gamma_m) fm(x)=fm1(x)+βmb(x;γm)

  3. 得到加法模型:
    f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^{M}\beta_mb(x;\gamma_m) f(x)=fM(x)=m=1Mβmb(x;γm)

只需把基函数换成弱分类器 G m ( x ) G_m(x) Gm(x),就能得到adaboost算法:

2.2.4 adaboost

输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , y ∈ { − 1 , + 1 } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},y\in\{-1,+1\} T={(x1,y1),(x2,y2),...,(xN,yN)},y{1,+1}
输出:最终分类器 G ( x ) G(x) G(x)

  1. 初始化训练数据的权值分布:
    赋予训练集中每个样本一个权重,构成权重向量D,并假设每个权重都相等。
    D = ( w 11 , . . . , w 1 i , . . . , w i N ) , w 1 i = 1 N D=(w_{11},...,w_{1i},...,w_{iN}),w_{1i}=\dfrac{1}{N} D=(w11,...,w1i,...,wiN),w1i=N1

  2. 加法模型:叠加模型直到满足条件
    f o r m = 1 , 2 , . . . , M : for\quad m=1,2,...,M: form=1,2,...,M:(m为模型个数)
    (a). 使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本分类器:
    G m ( x ) : χ → { − 1 , + 1 } G_m(x):\chi \to \{-1,+1\} Gm(x):χ{1,+1}

    (b). 计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率:
    e m = 分 错 的 数 量 样 本 总 数 e_m=\dfrac{分错的数量}{样本总数} em=

    e m = ∑ i = 1 N w m i I ( y i    ≠ G m ( x i ) ) ∑ i = 1 N w m i = ∑ i = 1 N w m i I ( y i    ≠ G m ( x i ) ) e_m=\dfrac{\sum_{i=1}^{N}w_{mi}I(y_i\;\neq G_m(x_i))}{ \sum_{i=1}^{N}w_{mi} } \\=\sum_{i=1}^{N}w_{mi}I(y_i\;\neq G_m(x_i)) em=i=1Nwmii=1NwmiI(yi̸=Gm(xi))=i=1NwmiI(yi̸=Gm(xi))

    ©.计算分类器 G m ( x ) G_m(x) Gm(x)的权重系数
    α m = 1 2 l o g 1 − e m e m \alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m} αm=21logem1em

    1 − e m \quad \quad 1-e_m 1em是准确率, 1 − e m e m \dfrac{1-e_m}{e_m} em1em是相对准确率,可见错误率 e m e_m em上升,分类器所占的权重 α m \alpha_m αm就会降低。
    (d). 更新训练数据集的权重分布
    D m + 1 = ( w m + 1 , 1 , w m + 1 , 2 , . . . . , w m + 1 , N ) D_{m+1}=(w_{m+1,1},w_{m+1,2},....,w_{m+1,N}) Dm+1=(wm+1,1,wm+1,2,....,wm+1,N)

w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)) wm+1,i=Zmwmiexp(αmyiGm(xi))

Z m Z_m Zm是归一化因子,它使 D m D_m Dm成为一个概率分布:
Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^{N}w_{mi}exp(-\alpha_my_iG_m(x_i)) Zm=i=1Nwmiexp(αmyiGm(xi))

  1. 构建基本分类器的线性组合:
    f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^{M}\alpha_mG_m(x) f(x)=m=1MαmGm(x)

得到最终分类器:
G ( x ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x)=sign(\sum_{m=1}^{M}\alpha_mG_m(x)) G(x)=sign(m=1MαmGm(x))

Adaboost的训练误差分析表明,Adaboost的每次迭代可以减少它在训练数据集上的分类误差率,这说明了它作为提升方法的有效性。

Adaboost的优点:

  • 易用,需要调节的参数少;
  • 弱分类器可以是任何模型,比如逻辑回归, 线性回归等等, 最常用的是决策树桩;

3. 提升树

提升树是以分类树和回归树为基本分类器的提升方法,提升方法采用加法模型与前向分布算法,以决策树为基函数的提升方法称为提升树。

3.1梯度提升树算法

当损失函数是平方损失和 指数损失函数时,每一步的优化是简单的。但对于一般损失函数而言,则利用损失函数的负梯度去近似平方损失中的残差。

代码实现

决策树桩:基于单个特征的单层决策树,相当于在分类平面的一条水平线
每个弱分类器只能选择一个特征。

参考:

  1. 李航- 统计学习
  2. https://zhuanlan.zhihu.com/p/38507561
  3. https://www.bilibili.com/video/av56033745?from=search&seid=17687865746952149587
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值