接上一篇统计学习笔记,最近在做kaggle,用到了几种Boost,有机会把以前笔记剩余部分的补上了。
Boosting
Boosting类方法是将N个弱学习算法构建成一个相当于强学习算法的方法。例如用一套基本分类器按照不同的权重组合成一个强分类器,这些基本分类器之间有依赖关系,构成的最终分类器可以达到复杂的强分类器达到的效果,并且可以使用并行处理,时间效率比复杂模型更快。
在这里重点记录AdaBoost和XGBoost两个模型,也是实际应用中广泛使用的方法,最后会讨论效果和时间性能。
sklearn的ensemble里封装了AdaBoostClassifier/AdaBoostRegressor。
Boosting类的算法原理
- boosting的基本思想是选取弱学习器,可以是各种算法组合在一起用,也可用n个相同的算法,设定不同超参数。
- 组合方式,并行方式(Voting),串行(Cascading)。区别在于,并行方式是每个弱学习器给自己的结果,串行方式是第i+1个弱学习器只在第i个的置信度结果不够高时,对上一级的结果进行预测。
AdaBoost
Adaboost解决的问题
Adaboosting如何实现自适应
(适应弱分类器各自的训练误差率),由权值D实现,那么:
- 每一轮如何改变训练数据的权值或者概率分布?
- 提高被前一轮弱分类器错误分类的样本的权值,降低被正确分类样本的权值,权值改变依赖自己的权值更新策略,不同任务和训练集一般不同,必要时需要设计自己的更新策略
- 如何将N个弱学习模型组合成一个强学习模型
- Adaboost采取加权voting,准确率误差小的学习器权重高,误差大的权重小
Adaboost算法流程
<!—>
<—>
1 | 权重参数D,弱分类器个数 |
算法机制很容易理解,就拿李航那本书上的-1和1做分类的问题,拆分成
- 加法模型$f(x)=\sum{\beta_mb(x;\gamma_m)}$
- 损失函数
- 前向分布
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 | func[] |
在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 | 问题1.为什么不能用神经网络一类的强分类器。 |
EM
名词解释
1.高斯混合分布,
2.隐变量,从高斯混合分布产生的变量