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 ...
随机推荐
- Spring面向切面编程(AOP,Aspect Oriented Programming)
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...
- 32. Longest Valid Parentheses
题目: Given a string containing just the characters '(' and ')', find the length of the longest valid ...
- Sqlmap基础(一)
(1)选项:-r REQUESTFILE Load HTTP request from a file (2)选项:--current-db Retrieve DBMS curr ...
- 如何禁用 radio ,设置为只读,不能选定
如何禁用 radio ,设置为只读,不能选定 禁用 radio ,设置为只读,不能选定: <input name="gender" type="radio" ...
- Size Classes with Xcode 6
转载自 http://www.cocoachina.com/ios/20141015/9919.html 总结:通过在Size Classes不同的模式下设置,可以实现不同设备在横屏.竖屏下UIVie ...
- Linux 删除文件夹和创建文件的命令
删除文件夹实例:rm -rf /var/log/httpd/access将会删除/var/log/httpd/access目录以及其下所有文件.文件夹 删除文件使用实例: rm -f /var/log ...
- 进程控制的一些api
转自:http://blog.chinaunix.net/uid-26833883-id-3222794.html 1.fork() ,vfork() 创建进程 2‘ exec()类 在进程中执行其他 ...
- Android系列之Fragment(一)----Fragment加载到Activity当中
Android上 的界面展示都是通过Activity实现的,Activity实在是太常用了.但是Activity也有它的局限性,同样的界面在手机上显示可能很好看, 在平板上就未必了,因为平板的屏幕非常 ...
- 函数fil_node_create
/*******************************************************************//** Appends a new file to the c ...
- 基于XMPP的即时通信系统的建立(五)— openfire
现决定使用Openfire作为服务端,Openfire采用Java开发,基于XMPP的实时开源协作服务器.单台可支持上万并发用户. Openfire体系结构 Openfire体系由其提供的服务器端.客 ...