目录本文未完成,会持续更新
集成学习是一种利用多个基础模型来构建更加准确、稳定的预测模型的机器学习技术。集成学习的基本思想是将多个模型组合起来,通过集体决策来提高模型的预测性能。它能够有效地降低单个模型的过拟合风险,提高模型的泛化性能。
主要概念
- 基学习器
- 弱学习器
- 强学习器
串行集成学习
AdaBoost
AdaBoost算法是一种经典的串行式集成学习方法。在每次迭代中,AdaBoost算法会根据当前加权样本集训练一个弱分类器,并计算其错误率。然后,根据错误率计算分类器的权重,然后更新样本权重,并将更新后的样本集用于下一次迭代中。这样,每个分类器都是在当前加权样本集上训练的,而不是原始的训练集。
理解1:样本和分类器的加权
可以把AdaBoost算法类比为一个错题本,每个弱分类器都会形成一个错题本,在下一轮学习中,我们会针对错题本中的错误题目,更加用心地进行学习,以避免再犯相同的错误。
但需要注意的是,AdaBoost在每次迭代的时候并不只选取错题(错分类的样本),也会选择之前正确的题。就类似复习的时候不能只看错题,也得看看之前做对的题,只是权重更偏向错题。每个弱分类器都是在前一轮弱分类器分类错误的样本加权后训练的,以此更加关注分类错误的样本,从而提高分类性能。
那么,如何进行样本集的加权呢?
以下是具体的思路:
我们为了更聚焦与错误分类的那些样本,要设计一种形式使得当分类错误的时候更大,分类正确的时候更小。因此,可以考虑下面这种形式。
如果第\(t\)个分类器\(G_t\)错误分类了第\(i\)个样本,则第\(i\)个样本在第\(t+1\)轮中的权重为:
\[w_{i,t+1} = w_{i,t} \times e^{\alpha_t} \]其中\(\alpha(t)\)是第\(t\)个分类器的权重。反之,如果第\(t\)个分类器正确分类了第\(i\)个样本,则第\(i\)个样本在第\(t+1\)轮中的权重为:\(w_{i,t+1} = w_{i,t} \times e^{-\alpha_t}\)。这样就可以保证
这两种情况可以统一为:
\[w_{i,t+1} = w_{i,t} \times e^{-\alpha_t y_i G_t(x_i)} \]\(y_i G_t(x_i)\)在正确分类时为\(-1\),错误分类时为\(1\)。为了保证权重求和为\(1\),这样计算之后还会对整个权重进行归一化,即都除以\(\Sigma({w_{i,t}\times e^{-y_i\alpha(t)}})\)。
然后我们考虑如何计算\(\alpha_t\),\(\alpha_t\)是基本分类器的权重,它的计算如下:
- 计算\(G_t\)在训练集上样本加权后的分类误差率:
- 取自然对数
第二步的公式怎么来的呢?
这是因为我们希望正确分类的样本的权重比上错误分类的样本的权重恰好是正确率和错误率的比值的反比,如果用上面的式子的话,就有
\[\frac{e^{-\alpha_t}}{e^{\alpha_t}} = \frac{e^{-\frac{1}{2}log\frac{1-e_t}{e_t}}}{e^{\frac{1}{2}log\frac{1-e_t}{e_t}}} \\ = \frac{(\frac{1-e_t}{e_t})^{-\frac{1}{2}}}{( \frac{1-e_t}{e_t})^\frac{1}{2}} \\ = \frac{e_t}{1-e_t} \]假设两个弱分类器a和b,\(e_{a} = 0.8\)和\(e_{b} = 0.1\),在这两种情况下,正确分类的样本的权重比上错误分类的样本的权重分别是\(8:2\)和\(1:9\)。前一种情况的错误率很高,也就是大部分都是误分类的样本时,这时反而会提高分类正确的样本的权重。
AdaBoost算法在得到最终的分类器时,会对之前所有的分类器进行加权。以上面的分类器为例,a和b的\(\alpha\)的比值:
\[\frac{\alpha_a}{\alpha_b} = \frac{log\frac{1-e_a}{e_a}}{log\frac{1-e_b}{e_b}} \\ = \frac{log(\frac{1}{4})}{log (9)} \]可知\(log(\frac{1}{4})\)是负数,\(log (9)\)是正数,此处可以看出,分类性能越好的分类器,计算出的权重会更大,对最终结果影响的程度越高。
理解2:前向分步算法
AdaBoost最后生成的强分类器可以认为是一个加法模型,即:
\[f(x) = \left(\sum_{t=1}^{T} \alpha_t h(x;\theta_t)\right) \]其中,\(f(x)\)表示最终的强分类器,\(h(x;\theta_t)\)表示第\(t\)个弱分类器,\(\theta_t\)是该分类器的参数,\(\alpha_t\)是该分类器的权重。
学习这个模型可以最小化损失函数,但是这个问题非常复杂, 前向分步算法是用来解决这个优化问题。它通过从前向后每次学习一个基函数和系数,然后逐步逼近优化目标函数。
在AdaBoost中,优化的损失函数是指数损失函数,如下:
\[L(y,f(x)) = \exp(-yf(x)) \]其中,\(y \in \{-1, +1\}\)表示样本的真实标签,\(f(x)\)表示模型的预测值。
提升树
加法模型 + 前向分布算法
基函数: 决策
GBDT梯度提升决策树
GDBT, 即Gradient Boosting Decision Tree,梯度提升决策树
每一步的弱预测模型都依据损失函数的梯度方向,就是梯度提升。
XGBoost框架
LGBM框架
并行集成学习
Bagging并行式集成学习
Bagging,即Bootstrap AGGregatING,表示自助抽样集成,将训练集随机有放回地采样得到m个样本的采样集,基于每个采样集训练一个基学习器,再预测时将它们结合得到结果,通常分类问题使用投票法生成结果,回归问题使用平均法作为最终的结果。
以下是集合结果时使用的方法:
- 投票法
- 绝对多数投票 majority voting:选取过半数投票的结果
- 相对多数投票 plurality voting:选取得票数最多的结果
- 加权投票: 通过训练权重,对每个基分类器的结果加权处理
- 平均法
- 简单平均:直接算平均值作为最终结果
- 加权平均:通过训练权重,对每个基分类器的结果加权处理
Random Forest随机森林
总结与比较
-
GDBT和XGBoost的区别:GBDT使用梯度下降法,是一次导;XGboost使用牛顿法,使用到了loss function的二次导
-
Bagging
- 主要关注降低方差,在不容易受样本扰动的学习器上的效用更明显