Ensemble learning(集成学习)
集成学习:是目前机器学习的一大热门方向,所谓集成学习简单理解就是指采用多个分类器对数据集进行预测,从而提高整体分类器的泛化能力。
我们在前面介绍了。所谓的机器学习就是通过某种学习方法在假设空间中找到一个足够好的函数h逼近f,f是现实数据的分布函数模型,这个近似的函数就是分类器。
我们以分类问题作为说明,分类问题指的是使用某种规则进行分类,实际上就是寻找某个函数。集成学习的思路大体上可以这样理解:在对新的数据实例进行分类的时候,通过训练好多个分类器,把这些分类器的的分类结果进行某种组合(比如投票)决定分类结果,以取得更好的结果,就是我们生活中那句话“三个臭皮匠顶个诸葛亮”,通过使用多个决策者共同决策一个实例的分类从而提高分类器的泛化能力。
当然通过这种集成学习提高分类器的整体泛化能力是有条件的:
1)分类器之间应该具有差异性,想想看啊,如果使用的是同一个分类器,那么集成起来的分类结果是不会有变化的。
2)分类器的精度,每个个体分类器的分类精度必须大于0.5。如下面的图,可以看到如果p<0.5,那么随着集成规模的增加,分类精度会下降,但是如果大于5的话,那么最终分类精准度是可以趋于1的。
因此集成学习的关键有两点:
1)如何构建具有差异性的分类器 2)如何多这些分类器的结果进行整合。
1.构建差异性基分类器
(1)通过处理数据集生成差异性分类器
这种方法实际就是在原有数据集上采用抽样技术获得多个训练数据集,从而生成多个差异性分类器。流行的方法有装袋(bagging)和提升(boosting)。
bagging:通过对原数据集进行有放回的采用构建出大小和原数据集D一样的新数据集D1,D2,D3.....,然后用这些新的数据集训练多个分类器H1,H2,H3....。因为是有放回的 采用所以一些样本可能会出现多次,而其他样本会被忽略,理论上新的样本会包括67%的原训练数据。bagging通过降低基分类器方差改善了泛化能力,因此bagging的性能依赖于基分类器的稳定性,如果基分类器是不稳定的,bagging有助于减低训练数据的随机扰动导致的误差,但是如果基分类器是稳定的,即对数据变化不敏感,那么bagging方法就得不到性能的提升,甚至会减低,因为新数据集只有63%。
boostig:提升方法是一个迭代的过程,通过改变样本分布,使得分类器聚集在那些很难分的样本上,对那些容易错分的数据加强学习,增加错分数据的权重,这样错分的数据再下一轮的迭代就有更大的作用(对错分数据进行惩罚)。数据的权重有两个作用,一方面我们可以使用这些权值作为抽样分布,进行对数据的抽样,另一方面分类器可以使用权值学习有利于高权重样本的分类器。把一个弱分类器提升为一个强分类器,大家可以参考Adaboost算法。
(2)通过处理数据特征构建差异性分类器
对训练数据抽取不同的输入特征子集分别进行训练,从而构建具有差异性的分类器。一般采用随机子空间,少量余留法(抽取最重要的一些特征),遗传算法等。
(3)对分类器的处理构建差异性分类器
指的就是通过改变一个算法的参数来生成有差异性的同质分类器,比如改变神经网络的网络拓扑结构就可以构建出不同的分类器。
2.对基分类器结果进行整合
1、对于回归预测(数值预测)
(1)简单平均(Simple Average),就是取各个分类器结果的平均值。
(2)加权平均(Weight Average),加权平均。
2、对于分类(类别预测)
(1)简单投票(Major vote):就是每个分类器的权重大小一样,少数服从多数,类别得票数超过一半的作为分类结果
(2)加权投票(Weight Vote):每个分类器权重不一。
(3)概率投票(Soft vote):有的分类器的输出是有概率信息的,因此可用概率投票。
现在我们来说说为什么会集成学习会提高分类器的预测精度?
举个例子:
有5个分类器的正例率分别是{0.7,0.7,0.7,0.9,0.9},采用简单投票方法(必须有三个以上分类正确),那么正确分类的结果有以下几种:
3个分类器正确:0.73*0.1*0.1+3*0.72*2*0.9*0.1+3*0.7*0.32*0.9*0.9
4个分类器正确:0.73*0.9*0.1*2+3*0.72*0.3*0.92
5个分类器正确:0.73*0.92
把这几个相加可得p≈0.933>0.9,同理我们可以证明加权投票的效果会更好。
Ensemble learning(集成学习)的更多相关文章
- Ensemble learning(集成学习)
定义 集成学习是一种机器学习范式,其中多个学习器被训练来解决相同的问题. 这与试图从训练数据中学习一个假设的普通机器学习方法相反,集成方法尝试构造一组假设并将它们结合使用. 一个集合包含一些通常被称为 ...
- 7. ensemble learning & AdaBoost
1. ensemble learning 集成学习 集成学习是通过构建并结合多个学习器来完成学习任务,如下图: 集成学习通过将多个学习学习器进行结合,常可以获得比单一学习器更优秀的泛化性能 从理论上来 ...
- 6. Ensemble learning & AdaBoost
1. ensemble learning 集成学习 集成学习是通过构建并结合多个学习器来完成学习任务,如下图: 集成学习通过将多个学习学习器进行结合,常可以获得比单一学习器更优秀的泛化性能 从理论上来 ...
- Ensemble_learning 集成学习算法 stacking 算法
原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学 ...
- 机器学习:集成学习:随机森林.GBDT
集成学习(Ensemble Learning) 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测 ...
- 第七章——集成学习和随机森林(Ensemble Learning and Random Forests)
俗话说,三个臭皮匠顶个诸葛亮.类似的,如果集成一系列分类器的预测结果,也将会得到由于单个预测期的预测结果.一组预测期称为一个集合(ensemble),因此这一技术被称为集成学习(Ensemble Le ...
- 7. 集成学习(Ensemble Learning)Stacking
1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...
- 6. 集成学习(Ensemble Learning)算法比较
1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...
- 5. 集成学习(Ensemble Learning)GBDT
1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...
- 3. 集成学习(Ensemble Learning)随机森林(Random Forest)
1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...
随机推荐
- vss的ss.ini丢失或损坏导致的vss无法登录错误
vss的ss.ini丢失或损坏导致的vss无法登录错误 Written in 2007-07-03 18:17 在vss使用过程中,不知道什么原因,会导至vss目录中的ss.ini文件损坏,此文件位于 ...
- MyEclipse 利用反向功能生成Java 实体类
1.Window -> Open Perspective -> MyEclipse Database Explorer 到DB Broswer界面 2.右键 -> New,新建一个数 ...
- mysql: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x90</...'
插入数据出现问题,因为包含了特殊字符. 现象: 插入的数据中如果含有某些特殊字符,会导致插入数据失败,例如字符串”测试**插入数据...“,在console中insert是正常的,但是使用java代码 ...
- hdu 1394 Minimum Inversion Number (裸树状数组 求逆序数 && 归并排序求逆序数)
题目链接 题意: 给一个n个数的序列a1, a2, ..., an ,这些数的范围是0-n-1, 可以把前面m个数移动到后面去,形成新序列:a1, a2, ..., an-1, an (where m ...
- abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系! native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实 ...
- bzoj2794
这题我得到一个经验,bool型的dp一定要想办法把bool去掉来表示更多的东西(1933也是这个道理) 暴力大家都会,这里有两个限制条件 一个限制条件我们可以排序不断加入,另一个呢 我们可以用f[i] ...
- 前端JS对后台传递的timestamp的转换
后台传递的timestamp类型的数据的JSON: Date.prototype.format = function(format) { var o = { "M+" : this ...
- 设置mysql的interactive_timeout和wait_timeout的值
1,为什么要重新设置这两个变量的值? 因为如果数据库默认这两个变量的值是8小时(即28800秒)如果在8小时之内没有连接到数据库,等下次再连的时候就会抛连接超时,或连接关闭这样的异 常,但是多连接几次 ...
- javascript中的关键字和保留字
javascript中关键字的问题,将名称替换了下,确实就没有问题了.现在将它的关键字和保留字贴出来,便于日后查看和避免在次出现类似的问题. 1 关键字breakcasecatchcontinuede ...
- jQuery的威力
jQuery如此之好用,和其在获取对象时使用与CSS选择器兼容的语法有很大关系,毕竟CSS选择器大家都很熟悉(关于CSS选择器可以看看十分钟搞定CSS选择器),但其强大在兼容了CSS3的选择器,甚至多 ...