从上面几篇的决策树開始,就能够開始进入到集成学习(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. k8s 关键字以及管理流程。

    一.流程图如下 二.用户通过kubectl提交需要运行的docker container(pod). 三.api server把请求存储在etcd里面. 四.scheduler(调度)扫描,分配机器. ...

  2. 【目录】LeetCode Java实现

    这里记录一下自己刷的LeetCode题目. 有些博客用英文阐述自己的思路和收获,相当于练习一下英文的表达能力. 比较好的题目有加粗. 1. Two Sum 3. Longest Substring W ...

  3. [OpenCV-Python] OpenCV 中的图像处理 部分 IV (四)

    部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 21 OpenCV 中的轮廓 21.1 初识轮廓目标 • 理解什么是轮廓 • 学习找轮廓,绘制轮廓等 • 函数: ...

  4. 使用SQL逆向生成PDM文件

    首先导出表结构,可以使用Navicat 或者DataGrip 生成SQL文件后使用PowerDesigner 指定数据库类型,选择SQL文件即可

  5. Django 学习第一天——django 基本介绍和环境搭建

    web 应用设计模式(MTV MVC): MTV: M:models 模型:负责业务数据对象与数据库对象: T:templates 模板:负责如何把数据展示给用户: V:views 视图:负责业务逻辑 ...

  6. 进程间通信(IPC)

    1.什么是进程间通信 通俗来讲,进程间通信就是:多个进程之间的数据交互 进程都有自己独立的虚拟地址空间,导致进程之间的数据交互变得十分困难,通信复杂了,但是安全性提高了: 进程间通信的本质:多个进程之 ...

  7. 如何在Eclipse中查看Java类库的源代码以及相应的api

    你的JDK安装目录下%Java_home%/src.zip文件就是源码,解压缩找到对应包下面的类即可. 如果是Eclipse开发,ctr+鼠标左击,出现不了源码的话,在弹出的视图中点击attach s ...

  8. 11.2 正睿停课训练 Day15

    目录 2018.11.2 正睿停课训练 Day15 A 郁闷的小G(二分) B 小G的树(树形DP) C 数的距离(思路) 考试代码 B C 2018.11.2 正睿停课训练 Day15 时间:3.5 ...

  9. 认证登录装饰器与form组件的使用

    def auth(func): '''制作登录认证的装饰器''' def inner(request,*args,**kwargs): user_info=request.session.get(se ...

  10. BZOJ4313 : 三维积木

    不妨设$R$是唯一可以看到的颜色,考虑一维序列的情况. 设$f[i][j][k][x][y]$表示考虑了前$i$个位置,第$i$个位置的高度是$j$,最高高度是$k$,已经用了$x$个$R$,$y$个 ...