Boost-Adaboost

2020-02-05  本文已影响0人  zhouycoriginal

我们知道boost系列是强依赖关系, 有这个依赖, 各个学习器之间还有这些问题没有解决:

Adaboost

假定这里给一个二分类的数据集:
T={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}
我们先来看一下Adaboost的步骤

  1. 输入数据T
  2. 初始化训练数据的权重分布:
    D_1=(w_{11},w_{12},...,w_{1m}), W_{1i}= \frac{1}{m}, i=1,2,...,m
  3. k=1,2,...,K:
  1. 构建基本的纤性分类器组合:
    f(x)=\sum_{k=1}^{K}\alpha_kG_k(x)

Adaboost的损失函数

Adaboost损失函数采用指数损失, 指数损失比较少见
L(y,f(x))=e^{-yf(x)}
下面来推导一下其损失函数, 该算法为加法模型, 学习算法为前向分步算法, 前向分步算法其实就是: 通过前一轮学习器的学习, 来更新后一个弱学习器的训练集权重,按照上面的定义, 各轮学习器为:
f_{k-1}(x)=\sum_{k=1}^{K-1} \alpha_kG_k(x)
f_{k}(x)=\sum_{k=1}^{K} \alpha_kG_k(x)
显然, f_k(x)=f_{k-1}(x)+\alpha G_k(x)是成立的
利用前向分布, 我们可以得到每个新的子分类器的损失函数为:
L(\alpha_k, G_k(x))=argmin \sum_{i=1}^{m}e^{-y_i(f_{k-1}(x)+\alpha_{k} G_{k}(x))}
w_{ki}=e^{-y_if_{k-1}(x)},它的值不依赖于\alpha或者G_k,仅依赖于f_{k-1}(x),
将其代入损失函数得到:
L(\alpha_k, G_k(x))=argmin \sum_{i=1}^{m}w_{ki}e^{-y_i\alpha_k G_k(x)}
我们知道y_iG_k(x)其实是一个输出, 我们可以用一个指示函数I代替, 那么我们得到
L(\alpha_k, G_k(x))=argmin \sum_{i=1}^{m}w_{ki}e^{-y_i\alpha_kI(y_i\not=G_k(x))}
我们对\alpha求偏导:
\alpha_k=\frac{1}{2}\log \frac{1-e_k}{e_k}
最终, e_k求实我们的分类误差率
上面提到的四个问题, 基本上都已经解决了, 那么Adaboost如何处理回归问题?
回归问题, 基本上只用修改误差就可以了

  1. 首先我们计算其在训练集上的最大误差
    E_k=max|y_i-G_k(x_i)|
  2. 计算每个样本上的误差:
  1. 计算误差率
    e_k=\sum_{i=1}^{m}w_{ki}e_{ki}
    其他步骤都是一样的

Adaboost正则化

为了防止Adaboost过拟合,我们通常也会加入正则化项:
没有加正则化:
f_k(x)=f_{k-1}(x)+\alpha G_k(x)
加了正则化v:
f_k(x)=f_{k-1}(x)+v\alpha G_k(x)
v的取值范围在0~1之间, 更小的v代表我们需要更多的迭代次数

总结

理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。
Adaboost的主要优点有

上一篇下一篇

猜你喜欢

热点阅读