今天的主题是集成学习中的

, 或称作
, 首先我们来建立一种概念, 什么是
:
3D平面表示分类边界, 此图表示数据点和他们被分到的区域
这是上面3D动图中数据点的二维图, 要和上图对应看

集成学习的一种, 意思是建立多个弱分类器, 然后用这些弱分类器的线性加权组合来形成一个强分类器, 什么是弱分类器呢, 就是只比胡猜稍微好一点的分类器, 训练这些弱分类器是一个迭代的过程, 在这个过程里, 下一个弱分类器总是更加关注上一个弱分类器没有分好的数据样本, 以弥补之前弱分类器的不足,

就是类似"三个臭皮匠顶个诸葛亮"的算法.

首先我们先来通过可视化的方法来建立一种直觉, 上面两幅图中, 下面的2D图是一些数据点, 分为两类, 红色的类和蓝色的类, 上面动态图展示的是

迭代增加弱分类器的过程中, 分类边界的变化, 可见随着迭代次数的增加, 分类边界把数据点分别推向了正样本(红色)和负样本(蓝色)的区域, 当然如果仔细看的话, 也可以看到红色的点出现在蓝色的区域, 这属于

没有分对的样本.

源代码: https://github.com/aespresso/a_journey_into_math_of_ml

从零推导

:

我们首先有一个弱分类器

, 它输出的值非
,
,
的思路是把这些弱分类器的预测结果都加起来, 然后取
, 在我们的推导过程中, 假设我们要解决的问题是一个二项分类问题, 则我们要把这些弱分类器都加起来取
, 则有:

上式中

是一个

强分类器,

是数据或特征值,
指的是弱分类器的个数, 上式的意思是对弱分类器的输出值求和并取
,

然后我们发现只对弱分类器求和好像少了点什么, 没错, 我们要赋予每个弱分类器不同的权重:

上式中

指的是第
个弱分类器的权重.

中, 这么多弱分类器, 是凭什么依据划分的呢, 其实每个弱分类器关注的是

前面弱分类器没有分对的数据样本, 比如说第

个弱分类器犯了一些错误, 导致有些数据样本没有分对, 那么第
个弱分类器就会更加关注前面没有分对的数据点, 尝试弥补第
个弱分类器的不足.

假设我们有一些数据样本

, 其中
,
是数据样本的个数, 我们要解决的是

二项分类问题.

我们需要给每一个数据样本赋一个权重, 以控制每个弱分类器应该更加关注哪些数据样本, 我们需要让下一个弱分类器更加关注它前面的弱分类器没有分对的数据点, 设

在第
个弱分类器上的权重为
, 我们首先初始化, 在第
个弱分类器上所有数据点的权重都是一样的, 即:

初始化错误率为

, 比如说
个数据点, 分错了40个, 则
,
取值在
之间:

代入
, 得出:

那我们怎么确定下一个弱分类器需要关注哪些数据样本呢? 当我们定义好当前的弱分类器

之后, 做以下操作:

上式中

是归一化因子, 因为我们想要
, 怎么理解这个式子呢, 首先
是正数, 当
的时候,
的是
, 否则是
, 不难看出当当前弱分类器
预测正确的时候,
会变小, 而错误的时候,
会变大, 权重变大代表着下一个弱分类器中需要更加关注这些样本:

注意我们暂且不管

.

我们现在要求所有未归一的权重的和, 并求出可以使它最小的

, 我们把未归一的权重的和定义为
, 因为分错的样本输入到下一个弱分类器的权重(未归一)为
(见
), 则分错的样本越多
会越大, 相反分对的样本越多
越小.

上式左边加上

, 右边再减去.

上式中可看出, 上式左边跟我们当前的弱分类器

无关, 当前的弱分类器只对右式起作用, 也就是右式控制着
的大小, 为了得到我们想要的
, 我们要求
对于
的导数, 并把它设为
, 求出
的值, 注意下边我们会把等式左边省略掉, 因为它可看作一个常数.

解上面的式子, 这里省略过程, 因为比较简单, 大概解法是将

提到求和符号外面来, 同时取
, 化简, 得到
:

带入到
里, 得到下式, 注意这里用到了
:

我们求

,
是所有数据样本权重的和也就是所有
取值的和:

代入上式, 得出:

代入
里:

我们通过上式还是很难看出

的意义到底是什么, 没关系, 接下来就恍然大悟了, 下面我们求数据点中分类正确的样本和分类错误样本各自
的和:

我们又知道

, 得出
, 代入上式:

又因为

, 得出:

上式的意义是, 在我们每次增加一个新弱分类器的时候, 前面的弱分类器分错的样本的权重占总样本权重的

, 前面的弱分类器分对的样本的权重也占总样本权重的
.

我们把

的计算步骤梳理一下:
  1. 初始化

    ;
  2. 在第
    步, 选择可以最小化当前错误率
    的弱分类器, 并添加这个弱分类器, 以降低错误率(如果还没有弱分类器, 那就创建一个), 并计算
    ,
    , 定义新的弱分类器为
  3. 计算新的数据样本权重
    , 见
  4. 回到第2步, 直到收敛.
  5. 得到的模型为:

的特性:

  • 易用, 需要调节的参数少;
  • 弱分类器可以是任何模型, 比如逻辑回归, 线性回归等等, 最常用的是决策树桩;
  • 对数据敏感, 如果数据有很多噪音, 则
    会倾向于拟合噪音而最终导致模型的过拟合, 为了解决这样的问题, 可以给每一个弱分类器一个学习率权重, 让每个弱分类器最强分类器造成的影响小一些, 或做交叉验证, 让迭代的过程在合适的时机停止;
  • 可以用来做特征选择, 举个例子吧, 比如说要评估人群的信用风险, 然后你会有很多这些人的资料, 比如说性别年龄, 居住地址, 收入, 有无不动产等等, 如果你用
    的集成方法来做分类, 在迭代的每一步你需要用一个弱分类器划分数据样本, 假设我们用决策树桩, 决策树桩每次只能选择一个特征值进行划分, 在建模完成之后, 看一下模型里的弱分类器都是靠那些特征进行分类的, 就可以得出每种特征的重要性, 方便我们做特征选择, 剔除多余的特征, 增加计算效率, 减少噪音;
  • 注意, 在推导的过程中, 我们对强分类器输出的结果取
    , 实际中我们可以不单纯取
    , 而是找一个分类最好的阈值, 或者说边界, 这个阈值不一定为
    .

代码解读:

请关注我的b站频道, 课程的视频讲解稍后奉上, 包含对整个推导过程的讲解和代码讲解:

哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili​space.bilibili.com

import 

sklearn adaboost_集成学习-从零推导和实现adaboost与3D可视化相关推荐

  1. 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?

    系列 <使用sklearn进行集成学习--理论> <使用sklearn进行集成学习--实践> 目录 1 Random Forest和Gradient Tree Boosting ...

  2. 使用sklearn进行集成学习——实践

    目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参? 2.1 调参的目标:偏差和方差的协调 2.2 参数对整体模型性能的影响 2.3 一个朴实的方 ...

  3. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

    机器学习 集成学习篇--python实现Bagging和AdaBOOST算法 摘要 Bagging算法 Adaboost算法 摘要 本文通过python实现了集成学习中的Bagging和AdaBOOS ...

  4. 机器学习:集成学习之 Bagging、Boosting和AdaBoost

    Bagging.Boosting和AdaBoost(Adaptive Boosting)都是Ensemble learning的方法.集成学习其实就是有很多个分类器,概念就是三个臭皮匠,顶过诸葛亮. ...

  5. 【Python-ML】SKlearn库集成学习器Bagging

    # -*- coding: utf-8 -*- ''' Created on 2018年1月19日@author: Jason.F @summary: Bagging,通过bootstrap样本构建集 ...

  6. 【Python-ML】SKlearn库集成学习器Boosting

    # -*- coding: utf-8 -*- ''' Created on 2018年1月19日@author: Jason.F @summary: Boosting,无放回抽样,串行训练基学习器, ...

  7. 集成学习精讲02 - Bagging方法:多个基模型的聚合(SAP大神黄佳新作《零基础学机器学习》节选)

    我们将分为5篇文章介绍集成学习,分别是: 集成学习基础知识:偏差和方差 - 戳此阅读 Bagging - Boosting - 戳此阅读 Stacking/Blending - 戳此阅读 Voting ...

  8. sklearn快速入门教程:(五)集成学习

    sklearn快速入门教程–(五)集成学习 一.集成学习简述 集成学习是目前各类竞赛和工程中应用最广泛的模型提升方法.比如在kaggle中就有关于集成学习的介绍(Kaggle模型融合原文).这里所谓的 ...

  9. A01_机器学习_3.集成学习

    从三种基本决策树到集成学习 决策树是一个非常常见并且优秀的机器学习算法,它易于理解.可解释性强,其可作为分类算法,也可用于回归模型. 本文将分三篇介绍决策树,第一篇介绍基本树(包括 ID3.C4.5. ...

最新文章

  1. oc58--Category注意事项
  2. .net怎么读_想考UKVI不知道怎么报名?亲亲,这边建议你阅读全文并收藏呢
  3. 太好了,一分钟带你分清Python的模块、库、包有什么联系和区别?
  4. OPA 5 - CreateButtonTest creates CreateButtonSteps
  5. java callable用法_在Java中使用Callable和Future
  6. Java一个小练习----String类型转换int类型
  7. OpenERP 关于页码总页数
  8. CCF201503-1 图像旋转(100分)【数学计算】
  9. 在C#中调用另一个应用程序或命令行(.exe 带参数)zz
  10. 【ANDROID游戏开发二十六】追加简述SURFACEVIEW 与 GLSURFACEVIEW效率!
  11. qpsk matlab仿真,qpsk的matlab和simulink仿真.pdf
  12. Excel操作:使用Excel制作甘特图
  13. Nginx 重定向所有子域名到www
  14. python 微商城_微商城是自己开发好还是用第三方平台好?
  15. 断点回归matlab,【独家发布】差分断点回归设计(DIRD)及其在人口断点中的应用...
  16. 【月光博客】腾讯微信推出广告联盟
  17. 网络三定律:摩尔定律、吉尔德定律和迈特卡夫定律
  18. springcloud常见问题
  19. linux 汇编 push rbp,无法从汇编(yasm)代码调用64位Linux上的C标准库函数
  20. 算法度量方法——时间复杂度及空间复杂度

热门文章

  1. 解决加载静态文件无法被浏览器缓存问题
  2. 《Adobe Photoshop CS6中文版经典教程》—第1课1.4节在Photoshop中还原操作
  3. JDK源码笔记-java.util.HashMap
  4. 【oracle】手动安装EM
  5. 10个CSS简写/优化技巧
  6. 郝蕾怒骂河南人---江湖再起风云,网络哪里有净土
  7. Weblogic Server上部署War包
  8. 常见的视频格式有很多,用“格式工厂”转换大部分格式
  9. 《飞鸽传书》把写程序和文学创作相提并论
  10. 飞鸽传书:浅谈 Scrum