当前位置: 代码迷 >> 综合 >> 集成学习:AdaBoost
  详细解决方案

集成学习:AdaBoost

热度:50   发布时间:2023-12-06 04:15:52.0

目录

      • 0 简介
      • 1 目标优化函数
      • 2 求解目标优化函数
        • 2.1 把β看做常数
        • 2.2 求解β
      • 3 训练流程
      • 4 训练弱分类器
      • 5 强分类器的误差
      • 6 其他类型的AdaBoost
      • 7 实现细节

0 简介

Boosting的一种 关注于之前错分的样本
对样本赋予权重 弱分类器也有权重
强分类器由若干个弱分类器乘各自的权重组成
弱分类器为决策树

sgn(F(x))sgn(F(x))sgn(F(x))

F(x)=∑i=1Mβif(x;γ)F(x)=\sum\limits_{i=1}^{M}{\beta_if(x;\gamma)}F(x)=i=1M?βi?f(x;γ)

1 目标优化函数

采用指标损失函数 e?yF(x)e^{-yF(x)}e?yF(x)
需要求解的参数:

  1. 弱分类器的权重 β\betaβ
  2. 弱分类器的参数 γ\gammaγ
    Fj?1F_{j-1}Fj?1?代表上一个强分类器 FjF_{j}Fj?代表新的强分类器:
    Fj=Fj?1+βf(x)F_{j}=F_{j-1}+\beta f(x)Fj?=Fj?1?+βf(x)
    所以目标优化函数为
    min∑i=1le?yi[Fj?1+βf(xi)]min\sum_{i=1}^{l}e^{-y_i[ F_{j-1}+\beta f(x_i)]}mini=1l?e?yi?[Fj?1?+βf(xi?)]
    min∑i=1lwij?1?e?yiβf(xi)min\sum_{i=1}^{l}w_i^{j-1}·e^{-y_i\beta f(x_i)} mini=1l?wij?1??e?yi?βf(xi?)
    其中wij?1=e?yiFj?1w_i^{j-1}=e^{-y_iF_{j-1}}wij?1?=e?yi?Fj?1?
    代表 (j-1) 的强分类器对样本 i 的损失 或者说样本 i 在 (j-1) 时的权重

2 求解目标优化函数

2.1 把β看做常数

yiβf(xi)y_i\beta f(x_i)yi?βf(xi?) 只能取1或-1 f最优解的参数是使得下式最小:
min∑i=1lwij?1I(yi≠f(xi))min\sum_{i=1}^{l}w_i^{j-1}I(y_i\neq f(x_i))mini=1l?wij?1?I(yi???=f(xi?))
(这里求决策树f参数时其实我没太明白 为什么忽略了yi=f(xi)时的β )
(是因为为了求目标函数最小 都使得yi=f(xi))

2.2 求解β

目标优化函数变为最小化以下:
L(β)=e?β×∑yi=f(xi)wij?1+eβ×∑yi≠f(xi)wij?1=e?β×∑i=1lwij?1+(eβ?e?β)×∑yi≠f(xi)wij?1L(\beta)=e^{-\beta } ×\sum_{y_i=f(x_i)}w_i^{j-1}+e^{\beta } ×\sum_{y_i\neq f(x_i)}w_i^{j-1}\\\\=e^{-\beta } ×\sum_{i=1}^{l}w_i^{j-1}+(e^{\beta}-e^{-\beta})×\sum_{y_i\neq f(x_i)}w_i^{j-1}L(β)=e?β×yi?=f(xi?)?wij?1?+eβ×yi???=f(xi?)?wij?1?=e?β×i=1l?wij?1?+(eβ?e?β)×yi???=f(xi?)?wij?1?
解得β(当前弱分类器权重)
errj=∑yi≠f(xi)wij?1∑i=1lwij?1=上一个强分类器错分样本权重(损失)之和上一个强分类器所有样本权重(损失)之和err_j=\cfrac{\sum_{y_i\neq f(x_i)}w_i^{j-1}}{\sum_{i=1}^{l}w_i^{j-1}}=\cfrac{上一个强分类器错分样本权重(损失)之和}{上一个强分类器所有样本权重(损失)之和}errj?=i=1l?wij?1?yi???=f(xi?)?wij?1??=?
β=12ln?1?errjerrj\beta=\cfrac12 \ln\cfrac{1-err_j}{errj}β=21?lnerrj1?errj??

3 训练流程

流程
(1) 样本初始化权重为1l\cfrac1ll1?
(2) 对于t=1,2,3…T个训练好的弱分类器 做以下:

  • ①得到ft(x)f_t(x)ft?(x)的加权错误率 ete_tet?
  • ②计算弱分类器权重 βt=12ln?1?errjerrj\beta_t=\cfrac12 \ln\cfrac{1-err_j}{errj}βt?=21?lnerrj1?errj??
  • ③更新样本权重
    wit=wit?1?e?yift(xi)βtwit=wit∑i=1lwit(归一化)w_i^t=w_i^{t-1}·e^{-y_if_t(x_i)\beta_t}\\\\w_i^t=\cfrac{w_i^t}{\sum_{i=1}^{l}{w_i^t}} (归一化)wit?=wit?1??e?yi?ft?(xi?)βt?wit?=i=1l?wit?wit??

4 训练弱分类器

min∑i=1lwij?1I(yi≠f(xi))min\sum_{i=1}^{l}w_i^{j-1}I(y_i\neq f(x_i))mini=1l?wij?1?I(yi???=f(xi?))
Gini纯度公式为:

G=∑i(∑j,yj=iwL,j)2∑iwL,i+∑i(∑j,yj=iwR,j)2∑iwR,iG=\cfrac{\sum\limits_i(\sum\limits_{j,y_j=i}w_{L,j})^2}{\sum_iw_{L,i}}+\cfrac{\sum\limits_i(\sum\limits_{j,y_j=i}w_{R,j})^2}{\sum_iw_{R,i}}G=i?wL,i?i?(j,yj?=i?wL,j?)2?+i?wR,i?i?(j,yj?=i?wR,j?)2?

5 强分类器的误差

每增加一个弱分类器(保证加权错误率小于1/2) 误差上限会减小
误差上界会乘一个小于1的数 证明公式太长了 先略掉

6 其他类型的AdaBoost

  • 上述是离散型的AdaBoost
  • 实数型Adaboost
  • LogitBoost
  • Gentle型AdaBoost

7 实现细节

  • 弱分类器一般选择深度很小的决策树
  • 弱分类器应选择非线性的
  • 弱分类器个数:训练时增加弱分类器 当训练误差或测试误差达到阈值 终止训练
  • 样本权重削减:样本权重趋于0的样本在后面的训练中可以剔除掉