![v2-67bd3ca2f78870de448bbfbfda1bc365_1440w.jpg?source=172ae18b](http://img-01.proxy.5ce.com/view/image?&type=2&guid=9258dbaf-4c2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-67bd3ca2f78870de448bbfbfda1bc365_1440w.jpg?source=172ae18b)
今天的主题是集成学习中的
![v2-3c8f07ca1817d3f21e67bc5fde990923_b.gif](http://img-02.proxy.5ce.com/view/image?&type=2&guid=9258dbaf-4c2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-3c8f07ca1817d3f21e67bc5fde990923_b.gif)
![v2-226e513b14a9eabb1dffbc43c7647f6a_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=9258dbaf-4c2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-226e513b14a9eabb1dffbc43c7647f6a_b.jpg)
首先我们先来通过可视化的方法来建立一种直觉, 上面两幅图中, 下面的2D图是一些数据点, 分为两类, 红色的类和蓝色的类, 上面动态图展示的是
源代码: https://github.com/aespresso/a_journey_into_math_of_ml
从零推导
我们首先有一个弱分类器
上式中
然后我们发现只对弱分类器求和好像少了点什么, 没错, 我们要赋予每个弱分类器不同的权重:
上式中
在
假设我们有一些数据样本
我们需要给每一个数据样本赋一个权重, 以控制每个弱分类器应该更加关注哪些数据样本, 我们需要让下一个弱分类器更加关注它前面的弱分类器没有分对的数据点, 设
初始化错误率为
将
那我们怎么确定下一个弱分类器需要关注哪些数据样本呢? 当我们定义好当前的弱分类器
上式中
注意我们暂且不管
我们现在要求所有未归一的权重的和, 并求出可以使它最小的
上式左边加上
上式中可看出, 上式左边跟我们当前的弱分类器
解上面的式子, 这里省略过程, 因为比较简单, 大概解法是将
将
我们求
将
将
我们通过上式还是很难看出
我们又知道
又因为
上式的意义是, 在我们每次增加一个新弱分类器的时候, 前面的弱分类器分错的样本的权重占总样本权重的
我们把
- 初始化
;
- 在第
步, 选择可以最小化当前错误率
的弱分类器, 并添加这个弱分类器, 以降低错误率(如果还没有弱分类器, 那就创建一个), 并计算
,
, 定义新的弱分类器为
- 计算新的数据样本权重
, 见
- 回到第2步, 直到收敛.
- 得到的模型为:
- 易用, 需要调节的参数少;
- 弱分类器可以是任何模型, 比如逻辑回归, 线性回归等等, 最常用的是决策树桩;
- 对数据敏感, 如果数据有很多噪音, 则
会倾向于拟合噪音而最终导致模型的过拟合, 为了解决这样的问题, 可以给每一个弱分类器一个学习率权重, 让每个弱分类器最强分类器造成的影响小一些, 或做交叉验证, 让迭代的过程在合适的时机停止;
- 可以用来做特征选择, 举个例子吧, 比如说要评估人群的信用风险, 然后你会有很多这些人的资料, 比如说性别年龄, 居住地址, 收入, 有无不动产等等, 如果你用
的集成方法来做分类, 在迭代的每一步你需要用一个弱分类器划分数据样本, 假设我们用决策树桩, 决策树桩每次只能选择一个特征值进行划分, 在建模完成之后, 看一下模型里的弱分类器都是靠那些特征进行分类的, 就可以得出每种特征的重要性, 方便我们做特征选择, 剔除多余的特征, 增加计算效率, 减少噪音;
- 注意, 在推导的过程中, 我们对强分类器输出的结果取
, 实际中我们可以不单纯取
, 而是找一个分类最好的阈值, 或者说边界, 这个阈值不一定为
.
代码解读:
请关注我的b站频道, 课程的视频讲解稍后奉上, 包含对整个推导过程的讲解和代码讲解:
哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibilispace.bilibili.comimport