ML - 集成算法


一、什么是集成学习

综合多方面的意见来做出决策。
比如:买东西推荐、专家会诊疾病。

根据各种算法做出决策:KNN,逻辑回归,SVM,决策树,神经网络,贝叶斯;
sklearn 中提供的方法称为 Voting Classifier


集成学习的思路:

  • Voting
  • Bagging
    - 随机森林
  • Boosting
  • Stacking

二、算法介绍

1、Hard & Soft Voting

Hard 模式即 (分类)少数服从多数;(回归)取平均值。
Soft:有权值。要求集合的每一个模型 都能估计概率。

SVC 没有直接计算概率;如果把参数 probability 设置为 true,就会去计算(消耗更多计算资源)。


创建更多子模型

虽然有很多机器学习方法,但从投票的角度来看,仍然不够多。

需要创建更多的子模型,集成更多的子模型的意见;子模型之间不能一致,需要有差异性。

如何创建差异性?每个子模型只看样本数据的一部分。
例如:一共有 500 个样本数据,每个子模型只看 100个样本数据。

每个子模型并不需要太高的准确率,但至少要比平均水平高。为什么?
如果每个子模型只有 51%的准确率,只有一个子模型时,整体准确率 50%;
有3个子模型,整体准确率: 0.5 1 3 + C 3 2 ⋅ 0.5 1 2 ⋅ 0.49 0.51^3 + C_3^2 \cdot 0.51^2 \cdot 0.49 0.513+C320.5120.49 --> 51.5%;虽然提高不多,但是有提高。
如果有 500 子模型,整体准确率 ∑ 5 0 0 i = 251 C 5 0 0 i ⋅ 0.5 1 I ⋅ 0.4 9 500 − i \sum^500_{i=251} C_500^i \cdot 0.51^I \cdot 0.49^{500-i} 500i=251C500i0.51I0.49500i --> 65.6%

如果每个子模型准确率达到 60%,500个模型的整体准确率达到 99.999%


2、Bagging 和 Pasting

怎么看样本数据的一部分?两种方式:

  1. 放回取样(更常用): Bagging;统计学中叫做 boostrap;
  2. 不放回取样 Pasting;

为什么放回取样更常用?

  1. 放回取样可以分成更多类别。
  2. Pasting 不放回,那么500个样本分为5个时,非常依赖于 如何划分样本。相比之下,Bagging 没有那么依赖随机。

OOB

OOB : Out-of-Bag

放回取样导致一部分样本很可能没取到(平均大约有 37% 的样本没有取到),没有取到的样本也称为 OOB。‘

所以在使用 Bagging 的过程中,就不需要 train_test_split 了,而使用这部分 从没有被取过的样本 来做 测试/验证。

sklearn 中的属性 oob_score_ 可以看到用 oob 作为测试数据集,得到的结果。


并行计算

Bagging 的思路极易进行并行化处理,sklearn 中对于可以并行的算法,一般传入 n_jobs 属性。


差异化

之前让子模型产生差异化的方式,是去看更小的样本数据集。其实还有其他方式,如:

  1. 针对特征进行随机采样 Random Subspaces
    一般应用在样本特征非常多的情况下,比如图像识别领域,图片上每一个像素点都是一个特征,这样每一个样本相应的特征量就比较大。
    所有特征构成特征空间,对特征 来随机采样;可以说是在子空间(Subspaces)中进行取样。

在特征空间上进行采样,又可以称为 bootstrap_features。


  1. 既针对样本,又针对特征进行随机采样 Random Patches

既在行(样本)的维度上随机采样,又在列(特征)的维度上随机采样;看起来就像是一块布上的补丁(Patches)

在这里插入图片描述


以上这样的集成方式,有个非常形象的名字,叫做 随机森林。
在这个 BaggingClassifier 中有五百棵树,每棵树看到的样本都是不同的,所以每棵树都有一定的随机性。由多个这样的树组成的森林,也叫随机森林。


随机森林

在 Bagging 中,基础评估算法(Base Estimator) 都是 决策树(Decision Tree);
整个集成学习相当于集成了成百上千个决策树;对于这样的集成学习,一般形象称为 随机森林

sklearn 专门封装了一个类 来更方便的创建一个 随机森林的学习模型。
每一个决策树,实际上都是在某一个节点上进行划分。sklearn 的随机森林模型,决策树在节点划分上,在随机的特征子集上,寻找最优划分特征。而不是在每一个节点上,都在所有的特征上去寻找最优划分。
创造差异的方式是增加随机性,sklearn 这样的封装方式,进一步增加了随机性。


Extra-Trees

全称为 extreme random trees,极其随机的森林。
极其随机表现在:决策树在节点的划分上,使用随机的特征 和 随机的阈值 进行划分。
每一颗树的形状和差异会非常大。

优点:提供额外的随机性,抑制过拟合,但增大了 bias。比随机深林 有更快的训练速度。


3、Boosting

集成多个模型,和 Bagging 不同的是,每个模型都在尝试增强(Boosting)整体的效果,而非模型之间独立的关系。
下面以 Ada Boosting 为例说明。


Ada Boosting

在这里插入图片描述

浅色的点是被预测成功的,深色是和模型差距比较远的样本点。
让数据和数据之间产生了权重的差别,提高上一次没被学习到的点的权值,已学习的权值减少些;以形成新的样本数据 再使用某种算法进行学习。

每一次生成的子模型,都在想办法弥补 上一次没有被有被成功预测的样本点。


如何赋权值?可以转化为求极值的问题。


Gradient Boosting
  1. 针对整体数据集训练一个模型 m1,产生错误 e1;
  2. 针对 e1 训练第二个模型 m2,产生错误 e2;
    (m2 的作用就是能预测出 模型m1 犯的错误是什么;就是说 m2 样本的输出值 是 m1 所犯的错误; m2 拟合 e1 也会犯错误,称为 e2)
  3. 针对 e2 训练第三个模型 m3,产生错误 e3;
  4. 最终预测结果是: m1 + m2 + m3 + …
    m1,m2,m3 这每一个模型都是对前一个模型所犯错误的补偿;

4、Stacking

在这里插入图片描述

在三个模型的预测结果,再添加一层算法,用新模型的训练结果作为最终输出。


如何训练 Stacking

以上述为例,将数据分为两部分;一份用来训练三个模型,第二份数据 给训练好的三个模型中输出结果;这个输出结果,和第二份数据中的真值形成新的数据集,用心的数据集来训练 第四个模型;最终形成 Stacking 集成学习模型。


还可以构建更复杂的 stacking 模型,比如:

在这里插入图片描述

有多少层,分多少分数据。层数是一个超参数。
由于复杂性,非常容易过拟合。

这样非常像神经网络,只是对于神经网络,每一个神经元不是全新算法,只是计算函数的值而已。
神经网络的层数增多,就是深度学习;会产生很多问题,需要在深度学习中探讨如何解决过拟合的问题。


sklearn 中没有提供接口来实现 stacking 算法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值