机器学习笔记十三:Ensemble思想(上)
从上面几篇的决策树開始,就能够開始进入到集成学习(ensemble learning)了,与其说集成学习是一种算法,倒不如说集成学习是一种思想.
集成学习的思想也是非常自然非常符合人类直观理解的. 用通俗的不能更通俗的话来说,要是一个机器学习器解决不了问题,那就多训练几个.再把这些学习器结合起来完毕机器学习任务. 能够类比开会,一群人讨论得到的解决的方法一般比一个人拍板的要好.
用过集成学习之后,一般来说,效果都会比某些单一的算法效果要好.所以,无论是为了排名还是为了其它的东西,kaggle等机器学习竞赛一大部分方案都会使用集成学习的,你懂得.
这篇仅仅讲集成学习的主要思想和最常见的学习策略.并不带有太多的理论数学推导,在之后的下篇会增加进来.
一.概述
前面就已经讲到了,集成学习的思想是,我们能够训练非常多个学习器,通过一定的结合策略,终于形成一个强的学习器.形象一点看下图.
所以,你会非常自然的考虑:
我们通过如何的方式来得到n个学习器呢?
得到n个学习器之后,我们通过如何的策略来结合呢?
以下的内容就这两个疑惑来讲一下常见的训练多个学习器的方法和结合多个学习器的方法.
二.怎么得到多个学习器
这一部分举两个最常见的得到多个学习器的思路.一种是bagging,第二种是boosting.
Ⅰ.bagging
要理解bagging,首先知道bootstrap词汇的故事.这个词汇表示的是靴子上面的小环或者是悬挂物等等,通过这个小东西能够方便穿靴子.意思是不依靠外界的帮助,或者叫做自助法.
在这里表示一种有放回的抽样方法.所以以后看到bootstrap这个词不要不知道是什么意思.相同,你可能会经常看到一个词叫做bootstrap sampling.这个词的意思是自助採样,对于N个样本的训练集,我从里面随机取出m个样本,得到一个子训练集.然后把这些样本放回. 然后再取m个样本,得到第二个子训练集,再放回去………..重复这种步骤k次,得到k个子训练集.
Bagging能够看做是bootstrap aggregation的简写.
bagging得到多个学习器的方式为:
通过自助採样的方法得到K个训练集,然后分别在这K个训练集上面训练学习器.然后就得到了K个学习器.
非常easy的思想,形象一点例如以下图所看到的.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGllcmhhY2tlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
须要注意的是,bagging对于弱学习器没有限制,也就是说,你能够用决策树,SVM等等都是能够的.一般经常使用的是决策树和神经网络.
由于baggin的随机採样思路,模型的泛化能力非常强,减少了模型的方差.可是对于训练集的拟合程度就不是那么好,也就是说偏差会大一些.
符合bagging思想的比較出名的学习算法就是随机森林了,在后面会具体来讲随机森林.这里先知道随机森铃的思想算是bagging即可.
Ⅱ.boosting
boosting的思想是:
训练集(当中各个元素)的权重是依据学习器的表现来改变的.
这个和bagging就有非常大的不同了.bagging採用自助採样的方式”产生”出多个训练集.可是boosting仅仅有一个训练集,可是训练集中各个元素(输入向量)的权重是不同的.
具体一点,boosting是先从具有初始权重的训练集训练出一个弱学习器1,然后依据弱学习器1的表现,来更新样本的权重. 然后再具有新的权重的训练集上面训练弱学习器2,然后依据弱学习器2的表现来更新样本的权重……..重复多次 ,得到m个学习器,最后整合这些弱学习器得到强学习器.
形象一点的话看下图.
这里并不具体展开讲权重改变的具体细节,由于这篇的目的是高速理解思想,为后面的打基础.更具体的在后面的博客会具体给出.
Boosting框架以下比較出名好用的就是Adaboost算法和提升树了.后面都会讲到.
三.通过如何的策略结合学习器
这里仅仅能说要粗略的带过了,由于后面会从具体的实例里面体会怎么结合各种学习器.比在这里泛泛而谈要实用得多.
重点是要好好理解bagging和boosting的思想.
机器学习笔记十三:Ensemble思想(上)的更多相关文章
- 机器学习笔记—svm算法(上)
本文申明:本文原创,如转载请注明原文出处. 引言:上一篇我们讲到了logistic回归,今天我们来说一说与其很相似的svm算法,当然问题的讨论还是在线性可分的基础下讨论的. 很多人说svm是目前最好的 ...
- Python机器学习笔记 集成学习总结
集成学习(Ensemble learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合,从而获得比单个学习器显著优越的泛化性能.它不是一种单独的机器学习算法啊,而更像是一种优 ...
- 《C++游戏开发》笔记十三 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9611887 作者:七十一雾央 新浪微博:http:/ ...
- Python机器学习笔记:使用Keras进行回归预测
Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...
- Python机器学习笔记:sklearn库的学习
网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一方面,其实最好的教程就是官方文档. 官方文档地址:https://scikit-learn.org/stable/ (可是官方文档非常 ...
- Python机器学习笔记:不得不了解的机器学习面试知识点(1)
机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...
- 【转】机器学习笔记之(3)——Logistic回归(逻辑斯蒂回归)
原文链接:https://blog.csdn.net/gwplovekimi/article/details/80288964 本博文为逻辑斯特回归的学习笔记.由于仅仅是学习笔记,水平有限,还望广大读 ...
- Python机器学习笔记:不得不了解的机器学习知识点(2)
之前一篇笔记: Python机器学习笔记:不得不了解的机器学习知识点(1) 1,什么样的资料集不适合用深度学习? 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势. 数据集没有局 ...
- Python机器学习笔记:K-Means算法,DBSCAN算法
K-Means算法 K-Means 算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means 算法有大量的变体,本文就从最传统的K-Means算法学起,在其基础上学习 ...
随机推荐
- BZOJ5091 摘苹果 BZOJ2017年11月月赛 概率,期望
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5091 11月月赛B题 题意概括 题解 代码 #include <cstring> #i ...
- 【LeetCode】163. Missing Range
Difficulty: Medium More:[目录]LeetCode Java实现 Description Given a sorted integer array where the rang ...
- 如何查看Unity的版本
打开Unity,Help->About Unity
- C语言程序内存的分区
本文转载自:https://blog.csdn.net/shulianghan/article/details/20472269 C语言程序内存分配 (1) 内存分区状况 栈区 (stack) : ...
- 在Macos下完美解决Adobe Dreamweaver CC 2018 汉化及操作方法
1.先关闭Dreamweaver,打开Finder进入应用程序,找到“Adobe Dreamweaver CC 2018”目录展开,移除“zh_CN”目录或者更名: 2.下载附件的汉化语言包解压,把解 ...
- 汉化 android studio
Analyze APK...android.jar\com\android\tools\idea\apk\viewer AnalyzeApkAction.class
- 用面向对象计算BMI指数
from __future__ import division class Student: def __init__(self,name,weight,height): self.name=name ...
- js控制json生成菜单——自制菜单(一)
此文档解决以下问题: 1.JSON文件的书写方式 2.jQuery.getJSON()的运用 3.jQuery.each()的运用 4.jQuery的DOM 操作方法之一:.append()的运用 5 ...
- db2文件系统已满
文章主要讲述的是DB2文件系统已满的正确解决方案,此文首先是以列举错误案例来对其进行分析,之后再给出正确的解决方案,以下就是文章的主要内容的具体描述,望大家浏览之后会对其有更好的了解. DB2文件系统 ...
- C#高级编程9 第16章 错误和异常
C#高级编程9 第16章 错误和异常 了解这章可以学会如何处理系统异常以及错误信息. System.Exception类是.NET运行库抛出的异常,可以继承它定义自己的异常类. try块代码包含的代码 ...