接上一篇统计学习笔记,最近在做kaggle,用到了几种Boost,有机会把以前笔记剩余部分的补上了。

Boosting

Boosting类方法是将N个弱学习算法构建成一个相当于强学习算法的方法。例如用一套基本分类器按照不同的权重组合成一个强分类器,这些基本分类器之间有依赖关系,构成的最终分类器可以达到复杂的强分类器达到的效果,并且可以使用并行处理,时间效率比复杂模型更快。

在这里重点记录AdaBoost和XGBoost两个模型,也是实际应用中广泛使用的方法,最后会讨论效果和时间性能。

sklearn的ensemble里封装了AdaBoostClassifier/AdaBoostRegressor

Boosting类的算法原理

  1. boosting的基本思想是选取弱学习器,可以是各种算法组合在一起用,也可用n个相同的算法,设定不同超参数。
  2. 组合方式,并行方式(Voting),串行(Cascading)。区别在于,并行方式是每个弱学习器给自己的结果,串行方式是第i+1个弱学习器只在第i个的置信度结果不够高时,对上一级的结果进行预测。

AdaBoost

Adaboost解决的问题

Adaboosting如何实现自适应
(适应弱分类器各自的训练误差率),由权值D实现,那么:

  1. 每一轮如何改变训练数据的权值或者概率分布?
  • 提高被前一轮弱分类器错误分类的样本的权值,降低被正确分类样本的权值,权值改变依赖自己的权值更新策略,不同任务和训练集一般不同,必要时需要设计自己的更新策略
  1. 如何将N个弱学习模型组合成一个强学习模型
  • Adaboost采取加权voting,准确率误差小的学习器权重高,误差大的权重小

Adaboost算法流程

<!—>


<—>

1
权重参数D,弱分类器个数

算法机制很容易理解,就拿李航那本书上的-1和1做分类的问题,拆分成

  1. 加法模型$f(x)=\sum{\beta_mb(x;\gamma_m)}$
  2. 损失函数
  3. 前向分布

1.加法模型是指:有一系列基函数,其中基函数的变量$x$和某种系数$\gamma$,设有m次迭代,则每次迭代产生系数$\gamma_m$和基函数的系数$\beta_m$,产生$\beta_mb(x;\gamma_m)$,我们也可以把这个基函数成为分类器$G$,最终模型也可以写成$f(x)=\sum{\beta_mb(x;\gamma_m)}=\sum{\alpha_mG(x)_m}$

2.损失函数:由于含supervision,我们采取的损失函数可以采取大部分误差项或CE等损失函数
3.前向分布计算

1
2
3
4
5
6
func[]
for i in range(m):
(beta,gamma) =
argmin(sum(Loss(y,f(x)+beta*G(x,gamma))))
func[] = func[] + beta*G()
res = func[](x)

在argmin的操作里,涉及到系数的计算,首先我们需要每次迭代时计算分类误差(以第m次迭代为例)$err_m=\sum{w_{m,i}I(G_m(x)!=y)}$,那么$\beta_m=0.5\ln{\frac{1-err_m}{err_m}}$,更新样本权重$D,w_{m+1,i}=\frac{w_{m,i}}{Z_m}exp(-\beta_mG_m(x)y_i),Z=\sum{-\beta_mG_m(x)y_i}$,为归一化因子。

1
2
3
4
5
6
7
8
9
10
11
12
问题1.为什么不能用神经网络一类的强分类器。
因为adaboost是梯度算法,若果弱分类器太强,则会陷入局部最优。

问题2.当有不支持加权重的弱分类器时,如何解决。
resampling样本

问题3.权重的作用
1.计算弱分类器的加权系数,训练弱分类器G
2.
问题4.与random forest的区别
1.随机森林的每棵树独立做出决策,训练时没有先后顺序
2.adaboost的tree中,每个G以上一个的结果为输

EM

名词解释

1.高斯混合分布,
2.隐变量,从高斯混合分布产生的变量