从上面几篇的决策树開始,就能够開始进入到集成学习(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思想(上)的更多相关文章

  1. 机器学习笔记—svm算法(上)

    本文申明:本文原创,如转载请注明原文出处. 引言:上一篇我们讲到了logistic回归,今天我们来说一说与其很相似的svm算法,当然问题的讨论还是在线性可分的基础下讨论的. 很多人说svm是目前最好的 ...

  2. Python机器学习笔记 集成学习总结

    集成学习(Ensemble  learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合,从而获得比单个学习器显著优越的泛化性能.它不是一种单独的机器学习算法啊,而更像是一种优 ...

  3. 《C++游戏开发》笔记十三 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9611887 作者:七十一雾央 新浪微博:http:/ ...

  4. Python机器学习笔记:使用Keras进行回归预测

    Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...

  5. Python机器学习笔记:sklearn库的学习

    网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一方面,其实最好的教程就是官方文档. 官方文档地址:https://scikit-learn.org/stable/ (可是官方文档非常 ...

  6. Python机器学习笔记:不得不了解的机器学习面试知识点(1)

    机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...

  7. 【转】机器学习笔记之(3)——Logistic回归(逻辑斯蒂回归)

    原文链接:https://blog.csdn.net/gwplovekimi/article/details/80288964 本博文为逻辑斯特回归的学习笔记.由于仅仅是学习笔记,水平有限,还望广大读 ...

  8. Python机器学习笔记:不得不了解的机器学习知识点(2)

    之前一篇笔记: Python机器学习笔记:不得不了解的机器学习知识点(1) 1,什么样的资料集不适合用深度学习? 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势. 数据集没有局 ...

  9. Python机器学习笔记:K-Means算法,DBSCAN算法

    K-Means算法 K-Means 算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means 算法有大量的变体,本文就从最传统的K-Means算法学起,在其基础上学习 ...

随机推荐

  1. Python 模块介绍

    一.模块:用一坨代码实现了某个功能的代码集合. 二.模块分为三种 1.自定义模块 2.内置标准模块(又称标准库) 3.开源模块(上传方式,百度PyPi) 开源模块安装方式: a.yum b.pip c ...

  2. 【Java】 剑指offer(36) 二叉搜索树与双向链表

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不 ...

  3. 061 hive中的三种join与数据倾斜

    一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...

  4. 安装及配置sublime

    纯个人笔记,粗略编写,有时间再修改 参考:关于Sublime text3 配置及插件整理 参考:https://github.com/boontime/sublime-text3-config 参考: ...

  5. 【随笔】借鉴 & KPI式设计

    1. 别人(某成功案例)是这么做的,我们也就这么做吧 刚来组里一会就目睹了需求讨论会上的一场争执,大概就是某产品经理在解释需求解释到后面有些说不通了就说“xxx App是这么做的我觉得我们也可以这样做 ...

  6. C语言--pow()函数实现

      为什么自己实现一个pow()函数呢?昨天在Linux操作系统中调用这一个函数时,一直报错,也没有查找到具体的原因.故心血来潮实现这一函数功能. 函数所在头文件:   在"math.h&q ...

  7. PHP系统级函数 get_headers() 包含有服务器响应一个 HTTP

    get_headers() 是PHP系统级函数,他返回一个包含有服务器响应一个 HTTP 请求所发送的标头的数组.如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来判断 ...

  8. 潭州课堂25班:Ph201805201 redis第四课 (课堂笔记)

    redis支持丰富的数据类型, 是个非关系型数据库.以键值对存储,存在内存里, : string. 字符 list.   列表 set. 集合 zset(sorted set). 有序集合 hash ...

  9. Java虚拟机的最大内存是多少

    天分析了当前比较流行的几个不同公司不同版本JVM的最大内存,得出来的结果如下: 公司 JVM版本 最大内存(兆)client 最大内存(兆)server SUN 1.5.x 1492 1520 SUN ...

  10. keybd_event 被 SendInput 替代

    keybd_event   函数功能:该函数合成一次击键事件.系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数.在 ...