【机器学习基础】集成学习

🚀个人主页为梦而生~ 关注我一起学习吧!
💡专栏机器学习 欢迎订阅!相对完整的机器学习基础教学!
特别提醒:针对机器学习,特别开始专栏:机器学习python实战 欢迎订阅!本专栏针对机器学习基础专栏的理论知识,利用python代码进行实际展示,真正做到从基础到实战!
💡往期推荐
【机器学习基础】一元线性回归(适合初学者的保姆级文章)
【机器学习基础】多元线性回归(适合初学者的保姆级文章)
【机器学习基础】对数几率回归(logistic回归)
【机器学习基础】正则化
【机器学习基础】决策树(Decision Tree)
【机器学习基础】K-Means聚类算法
【机器学习基础】DBSCAN
【机器学习基础】支持向量机
💡本期内容
集成学习(Ensemble Learning)是一种通过结合多个弱分类器的预测结果,来得到一个更强大的分类器的方法。它基于“群体智慧”,通过对多个模型结果的综合,可以缓解过度拟合和欠拟合等问题,并提升预测性能。常见的集成学习算法包括 Boosting、Bagging、随机森林等。其中,Boosting 是一种将多个弱分类器变成强分类器的算法,Bagging 是一种基于 Bootstrap 取样的集成学习算法,随机森林则是一种结合决策树和 Bagging 的方法。集成学习在机器学习和数据挖掘领域有着广泛的应用,例如在图像分类、自然语言处理、信用风险评估等任务中表现出了良好的性能。



1 个体与集成

集成学习(ensemble learning)通过构建并结合多个学习器来提升性能
在这里插入图片描述

1.1 集成个体

考虑一个简单的例子,在二分类问题中,假定3个分类器在三个样本中的表现如下图所示,其中√ 表示分类正确,X 号表示分类错误,集成的结果通过投票产生。

在这里插入图片描述
通过上表我们可以发现一个问题,如果每个学习器分类结果都是相同的,那么集成之后跟一个学习器其实差不多,就像是(b);

但是如果“八仙过海各显神通”,各个学习器在集成之后尽可能的显现了自己的能力,并且集成后的强分类器的性能还得到了提升,那么我们就认为集成的效果是好的,例如(a);

除此之外,如果各个学习器集成到一起并没有使得总的分类性能得到提升,我们认为这个集群起了负作用,例如©。

于是,我们得出结论:集成个体应好而不同

1.2 集成错误率简单分析

  • 考虑二分类问题,假设基分类器的错误率为:

在这里插入图片描述

  • 假设集成通过简单投票法结合𝑇个分类器,若有超过半数的基分类器正确则分类就正确

在这里插入图片描述

  • 假设基分类器的错误率相互独立,则由Hoeffding不等式可得集成的错误率为:

在这里插入图片描述

上式显示,在一定条件下,随着集成分类器数目的增加,集成的错误率将指数级下降,最终趋向于0

注意

  • 上面的分析有一个关键假设:基学习器的误差相互独立
  • 现实任务中,个体学习器是为解决同一个问题训练出来的,显然不可能互相独立
  • 事实上,个体学习器的“准确性”和“多样性”本身就存在冲突
  • 如何产生“好而不同”的个体学习器是集成学习研究的核心

2 Boosting

Boosting是一种集成学习算法,旨在通过训练一系列的弱分类器(即性能稍好于随机猜测的分类器),将它们组合成一个强分类器(即性能显著提升的分类器)。与其他集成学习算法相比,Boosting通过迭代的方式逐步优化模型,提高预测性能。

Boosting的核心思想是通过对训练数据集进行加权,重点训练那些之前分类效果不佳的样本使得后续的弱分类器能够更加关注这些“困难”样本通过反复迭代,多个弱分类器被训练得到,并通过加权投票或加权求和的方式,综合它们的预测结果,得到最终的分类器

常见的 Boosting 算法包括 AdaBoost、Gradient Boosting 和 XGBoost。其中,AdaBoost(Adaptive Boosting)通过调整样本的权重来迭代训练弱分类器。Gradient Boosting 是一种基于梯度下降的 Boosting 算法,通过最小化损失函数的负梯度来进一步优化模型。XGBoost 是一种基于 Gradient Boosting 的高性能实现,通过结合正则化和特征子抽样等技术,提升了模型的泛化能力和训练速度。

在这里插入图片描述

  • 伪代码

在这里插入图片描述

  • Boosting族算法最著名的代表是AdaBoost

在这里插入图片描述

2.1 AdaBoost推导

基学习器的线性组合:

在这里插入图片描述
最小化指数损失函数

在这里插入图片描述
若𝐻(𝑥)能令指数损失函数最小化,则上式对𝐻(𝑥)的偏导值为0,即

在这里插入图片描述

若𝐻(𝑥)能令指数损失函数最小化,则上式对𝐻(𝑥)的偏导值为0,即

在这里插入图片描述

𝑠𝑖𝑔𝑛(𝐻(𝑥))达到了贝叶斯最优错误率,说明指数损失函数是分类任务原来0/1损失函数的一致的替代函数。

当基分类器ℎ𝑡基于分布𝐷𝑡产生后,该基分类器的权重𝛼𝑡应使得𝛼t𝑡最小化指数损失函数

在这里插入图片描述
令指数损失函数的导数为0,即
在这里插入图片描述
在获得𝐻𝑡−1之后的样本分布进行调整,使得下一轮的基学习器ℎ𝑡能纠正𝐻𝑡−1的一些错误,理想的ℎ𝑡能纠正全部错误
在这里插入图片描述
泰勒展开近似为

在这里插入图片描述
于是,理想的基学习器:

在这里插入图片描述
注意到在这里插入图片描述
是一个常数,令Dt 表示一个分布:
在这里插入图片描述
根据数学期望的定义,这等价于

在这里插入图片描述
由𝑓 𝑥 , ℎ 𝑥 ∈ {−1, +1}有:

在这里插入图片描述
则理想的基学习器

在这里插入图片描述

最终的样本分布更新公式
在这里插入图片描述

2.2 AdaBoost实验

在这里插入图片描述

从偏差-方差的角度:降低偏差,可对泛化性能相当弱的学习器构造出很强的集成


3 Bagging与随机森林

3.1 Bagging

  • Bagging算法伪代码

在这里插入图片描述

  • Bagging算法特点
  1. 时间复杂度低
    假定基学习器的计算复杂度为O(m),采样与投票/平均过程的复杂度为O(s),则bagging的复杂度大致为T(O(m)+O(s))。由于O(s)很小且T是一个不大的常数,因此训练一个bagging集成与直接使用基学习器的复杂度同阶
  2. 可使用包外估计

3.2 包外估计

𝐻𝑜𝑜𝑏(𝑥)表示对样本𝑥的包外预测,即仅考虑那些未使用样本𝑥训练的基学习器在𝑥上的预测
在这里插入图片描述

Bagging泛化误差的包外估计为:
在这里插入图片描述

3.3 Bagging实验

在这里插入图片描述
从偏差-方差的角度:降低方差,在不剪枝的决策树、神经网络等易受样本影响的学习器上效果更好

3.4 随机森林

随机森林(Random Forest)是一种集成学习算法,它通过构建多个决策树并进行投票或平均来提高分类或回归的准确性。随机森林可以应用于分类和回归问题,并且在机器学习和数据挖掘中具有广泛的应用。

随机森林的主要思想通过随机选择特征和样本创建多个决策树,并使用投票或平均来决定最终的预测结果

在这里插入图片描述

  • 随机森林的构建过程如下:
  1. 随机选取一部分特征:从原始特征集合中随机选取一部分特征作为候选特征。

  2. 基于选定特征构建决策树:使用选定的特征和对应的样本创建一颗决策树。决策树的构建过程使用基于信息增益或基尼系数等算法来选择划分特征。

  3. 重复步骤1和步骤2:重复上述步骤多次,创建多棵决策树。

  4. 进行预测:对于分类问题,每个决策树投票选择最可能的类别;对于回归问题,每个决策树的预测结果取平均值。

在这里插入图片描述
在这里插入图片描述


4 结合策略

学习器的组合可以从三个方面带来好处
在这里插入图片描述

4.1 平均法

  • 简单平均法

在这里插入图片描述

  • 加权平均法

在这里插入图片描述
注意

  1. 简单平均法是加权平均法的特例
  2. 加权平均法在二十世纪五十年代被广泛使用
  3. 集成学习中的各种结合方法都可以看成是加权平均法的变种或特例
  4. 加权平均法可认为是集成学习研究的基本出发点
  5. 加权平均法未必一定优于简单平均法

4.2 投票法

  • 绝对多数投票法(majority voting)

在这里插入图片描述

  • 相对多数投票法(plurality voting)

在这里插入图片描述

  • 加权投票法(weighted voting)

在这里插入图片描述

4.3 学习法

  • Stacking是学习法的典型代表

将训练好的所有基模型对训练基进行预测,第j个基模型对第i个训练样本的预测值将作为新的训
练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过
所有基模型的预测形成新的测试集,最后再对测试集进行预测。

在这里插入图片描述

  • 伪代码

在这里插入图片描述
多响应线性回归(MLR)作为次级学习器的学习算法 效果较好

相关推荐

  1. 机器学习模型—集成学习

    2024-01-12 06:08:02       18 阅读
  2. 机器学习集成学习概念介绍

    2024-01-12 06:08:02       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-12 06:08:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-12 06:08:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-12 06:08:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-12 06:08:02       20 阅读

热门阅读

  1. 探索计算机网络:应用层的魅力

    2024-01-12 06:08:02       39 阅读
  2. Linux 命令解释程序(shell)的模拟实现

    2024-01-12 06:08:02       32 阅读
  3. 初识C#语言

    2024-01-12 06:08:02       36 阅读
  4. Nacos:发现微服务的未来

    2024-01-12 06:08:02       35 阅读
  5. Docker容器,使用 Docker 做些什么

    2024-01-12 06:08:02       38 阅读
  6. LeetCode_5_中等_最长回文子串

    2024-01-12 06:08:02       35 阅读
  7. 定时音频数据采集并发送websocket实时播放

    2024-01-12 06:08:02       36 阅读
  8. python函数装饰器参数统计调用时间和次数

    2024-01-12 06:08:02       31 阅读
  9. docker 将镜像打包为 tar 包

    2024-01-12 06:08:02       35 阅读