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

v2-67bd3ca2f78870de448bbfbfda1bc365_1440w.jpg?source=172ae18b

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

, 或称作
, 首先我们来建立一种概念, 什么是
:

v2-3c8f07ca1817d3f21e67bc5fde990923_b.gif
3D平面表示分类边界, 此图表示数据点和他们被分到的区域

v2-226e513b14a9eabb1dffbc43c7647f6a_b.jpg
这是上面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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值