集成学习(Ensembling Learning)

集成学习(Ensembling Learning)

标签(空格分隔): 机器学习


Adabost

对于一些弱分类器来说,如何通过组合方法构成一个强分类器。一般的思路是:改变训练数据的概率分布(权值分布),针对不同的训练数据分布调用弱学习算法学习一系列的弱分类器,然后将他们组合起来,形成强分类器。
需要解决的问题有:

  • 在每一轮如何改变训练数据的权值或概率分布?
  • 如何将若分类器组合成一个强分类器。

已知数据集\(T = \{(x_{1},y_{1}),(x_{2},y_{2}),..., (x_{n},y_{n}) \}\)

  1. 初始化训练数据集\(T\)的权值分布:\(D_{1} = \{w_{11}, w_{12},..., w_{1n} \}\),则预测的损失函数为:\(J = \sum_{i=1}^{n}w_{1i}L(\hat{y}_{i} - y_{i})\);
  2. 使用带有权值分布的数据集\(D_{1}\)学习,得到一个基本分类器:\(G_{1}(x)\);
  3. 计算分类器\(G_{1}(x)\)在训练数据集上的分类误差率:\(\epsilon_{1} = \sum_{i=1}^{n}w_{1i}I(G_{1}(x_{i}) \neq y_{i})\);(该分类错误率 为)
  4. 计算每个分类器的系数:\(\alpha_{1} = \frac{1}{2}ln\frac{1-\epsilon_{1}}{\epsilon_{1}}\).
  5. 根据下式更新数据集分布\(D_{m}\): (\(w_{mi}\)为第m个分类器中每个数据i的权重)
    \[ w_{mi}= \begin{cases} \frac{w_{mi}}{Z_{m}}e^{-\alpha_{m}}, & \text {$G_{m}(x_{i}) = y_{i}$ } \\ \frac{w_{mi}}{Z_{m}}e^{-\alpha_{m}}, & \text{$G_{m}(x_{i})\neq y_{i}$ } \end{cases} \]
    (通过上式计算,可以使被基本分类器\(G_{m}\)正确分类的样本的权值减小,而错误分类的样本权值增大)
  6. 最终分类器为:\(G(x) = sign(\sum_{m=1}^{M}\alpha_{m}G_{m}(x))\)

梯度提升(Gradient Boosting)

与Adaboost不同的是,每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升。

梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合(基函数);
提升算法通过迭代的选择一个扶梯度方向上的基函数来逐渐逼近局部极小值。

首先,给定输入向量x和输出变量y组成的若干训练样本\(\{(x_{1}, y_{1}), (x_{2}, y_{2}),...,(x_{n}, y_{n}) \}\),目标是找到近似函数\(\hat{F}(x)\),使得损失函数\(L(y,F(x))\)的损失值最小。

  1. 给定常函数\(F_{0}(x):\) \(F_{0}(x) = argmin_{\gamma}\sum_{i=1}^{n}L(y_{i}, \gamma)\)
  2. 对于m=1 到 M

a. 计算伪残差\(r_{im} = [\frac{\partial L(y_{i}, F(x_{i}))}{\partial F(x_{i})}]_{F(x) = F_{m-1}(x)}\);

b. 使用数据\(\{(x_{i},r_{im})\}_{i=1}^{n}\)计算拟合残差的基函数\(f_{m}(x)\);

c. 计算步长\(\gamma_{m} = argmin_{\gamma}\sum_{i=1}^{n}L(y_{i},F_{m-1}(x_{i}) - \gamma * f_{m}(x_{i}))\);

  1. 更新模型\(F_{m}(x) = F_{m-1}(x) - \gamma_{m}f_{m}(x_{i})\).
上一篇:使用gevent-socketio和WSGIHandler时,Django:捕获/记录异常


下一篇:python – 带gevent的Gunicorn:维护每个请求的全局数据