集成学习(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})\).

集成学习(Ensembling Learning)的更多相关文章

  1. 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting

    本杂记摘录自文章<开发 | 为什么说集成学习模型是金融风控新的杀手锏?> 基本内容与分类见上述思维导图. . . 一.机器学习元算法 随机森林:决策树+bagging=随机森林 梯度提升树 ...

  2. 【Supervised Learning】 集成学习Ensemble Learning & Boosting 算法(python实现)

    零. Introduction 1.learn over a subset of data choose the subset uniformally randomly (均匀随机地选择子集) app ...

  3. 集成学习中的 stacking 以及python实现

    集成学习 Ensemble learning 中文名叫做集成学习,它并不是一个单独的机器学习算法,而是将很多的机器学习算法结合在一起,我们把组成集成学习的算法叫做“个体学习器”.在集成学习器当中,个体 ...

  4. 集成学习的不二法门bagging、boosting和三大法宝<结合策略>平均法,投票法和学习法(stacking)

    单个学习器要么容易欠拟合要么容易过拟合,为了获得泛化性能优良的学习器,可以训练多个个体学习器,通过一定的结合策略,最终形成一个强学习器.这种集成多个个体学习器的方法称为集成学习(ensemble le ...

  5. [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林

    [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...

  6. 机器学习:集成学习:随机森林.GBDT

    集成学习(Ensemble Learning) 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测 ...

  7. 浅谈树模型与集成学习-从决策树到GBDT

    引言   神经网络模型,特别是深度神经网络模型,自AlexNet在Imagenet Challenge 2012上的一鸣惊人,无疑是Machine Learning Research上最靓的仔,各种进 ...

  8. 第七章——集成学习和随机森林(Ensemble Learning and Random Forests)

    俗话说,三个臭皮匠顶个诸葛亮.类似的,如果集成一系列分类器的预测结果,也将会得到由于单个预测期的预测结果.一组预测期称为一个集合(ensemble),因此这一技术被称为集成学习(Ensemble Le ...

  9. 集成学习(ensemble learning)

    集成学习,又称为“多分类器系统”(multi-classifier system).“基于委员会的学习”(committee-based learning)等.基本的想法是结合多个学习器,获得比单一学 ...

随机推荐

  1. Android利用数据库传送数据

    ---恢复内容开始--- 一.建表 //通过SQLiteDatabase 创建数据库stu.db3 final SQLiteDatabase db = SQLiteDatabase.openOrCre ...

  2. 鸟哥的linux私房菜学习记录之开机流程、模块管理与Loader

  3. Java类加载信息的顺序:包括静态代码快、静态类变量、非静态代码快、构造方法、普通方法

    JVM运行之前会执行一个叫做类加载器的子系统,叫做ClassLoader,那么类里面那么多“元素”,究竟是个什么顺序呢,写几行代码测试一下,通过给每个方法和代码快和静态变量打上断点来测试: class ...

  4. 用Meta标签控制360浏览器默认极速模式打开自己的网站和正则表达式

    在head标签中添加一行代码: <html><head><meta name="renderer" content="webkit|ie-c ...

  5. 安装使用RESTful 框架SLIM方法

    相关框架: http://www.golaravel.com 是一个PHP框架,内置名为LUMEN的RESTful API框架,有中文文档, http://lumen.golaravel.com/do ...

  6. CMake快速入门教程:实战

    转自http://blog.csdn.net/ljt20061908/article/details/11736713 0. 前言    一个多月前,由于工程项目的需要,匆匆的学习了一下cmake的使 ...

  7. 关于iframe嵌套、动态获取iframe内的url、父页面重定向-2

    经过学习,发现了一种更好的办法 试验如下 1.html的内容如下: (2.html和3.html没有jquery,只有body的222和333) 结果为: 其实最容易搞糊涂的是,什么时候算self,其 ...

  8. java 四舍五入 保留俩位小数

    public static void main(String[] args) {              String str="0";              BigDeci ...

  9. javaScript去除空格或换行

    js 去掉空格.回车.换行 1 releaseDesc = releaseDesc.replace(/\ +/g,"").replace(/[\r\n]/g,"" ...

  10. OracleHelper

    /// <summary> /// OracleServer数据库访问的通用工具类 /// </summary> public abstract class OracleHel ...