当前位置: 首页 > news >正文

4.系统学习-集成学习

集成学习

  • 前言
  • Bias and Variance
  • 过拟合(overfitting)与欠拟合(underfitting)
  • 集成学习为什么有效?
  • Blending 模型集成
  • Stakcing 模型集成
  • Bagging模型集成
  • Bagging 模型集成算法流程:
  • Boosting模型集成
  • 作业

前言

比赛中集成学习,但要用好模型集成可能并不是那么简单,本文将讨论讨论:

  1. 模型总体误差分解,过拟合,欠拟合
  2. 为什么集成学习能降低总体误差
  3. Blending
  4. Stacking
  5. Bagging
  6. Boosting

Bias and Variance

在这里插入图片描述
假设有训练数据集 D D D,包含样本点 ( x 1 , y 1 ) , … , ( x n , y n ) (x_1, y_1), \ldots, (x_n, y_n) (x1,y1),,(xn,yn)
存在一个带噪音的真实函数 y = f ( x ) + ϵ y = f(x) + \epsilon y=f(x)+ϵ,噪音 ϵ \epsilon ϵ 均值为 0 0 0,方差为 σ 2 \sigma^2 σ2,我们希望通过数据集 D D D 训练模型 f ^ ( x ; D ) \hat{f}(x; D) f^(x;D) 尽可能逼近真实函数 f f f,使得任意训练数据集以外的样本误差最小化,即最小化误差函数 MSE:

E D , ϵ [ ( y − f ^ ( x ; D ) ) 2 ] = ( Bias D [ f ^ ( x ; D ) ] ) 2 + Var D [ f ^ ( x ; D ) ] + σ 2 \mathbb{E}_{D,\epsilon}\left[(y - \hat{f}(x; D))^2\right] = \left(\text{Bias}_D\left[\hat{f}(x; D)\right]\right)^2 + \text{Var}_D\left[\hat{f}(x; D)\right] + \sigma^2 ED,ϵ[(yf^(x;D))2]=(BiasD[f^(x;D)])2+VarD[f^(x;D)]+σ2

where 偏差 (bias) 部分:

Bias D [ f ^ ( x ; D ) ] = E D [ f ^ ( x ; D ) ] − f ( x ) \text{Bias}_D\left[\hat{f}(x; D)\right] = \mathbb{E}_D\left[\hat{f}(x; D)\right] - f(x) BiasD[f^(x;D)]=ED[f^(x;D)]f(x)

and 方差 (variance) 部分:

Var D [ f ^ ( x ; D ) ] = E D [ ( E D [ f ^ ( x ; D ) ] − f ^ ( x ; D ) ) 2 ] . \text{Var}_D\left[\hat{f}(x; D)\right] = \mathbb{E}_D\left[\left(\mathbb{E}_D[\hat{f}(x; D)] - \hat{f}(x; D)\right)^2\right]. VarD[f^(x;D)]=ED[(ED[f^(x;D)]f^(x;D))2].
这里我们已经通过公式推导将目标函数分解成三项:

a) 偏差项 (bias) 是采用不同训练数据集 D D D 时,模型预测和真值的偏差,可以看成由不同的模型假设带来的误差。比如真实函数是一个非线性函数 f f f,而我们采用线性回归模型 f ^ \hat{f} f^ 进行建模,由于这一假设,估计我们的线性模型 f ^ \hat{f} f^ 将存在误差。通常越复杂的模型偏差更小,复杂模型的假设空间更大,对真实函数逼近能力更强,偏差更小。

b) 方差项 (variance) 为采用不同训练数据集 D D D 训练模型时,模型对同一个样本预测值的波动大小,通常越复杂的模型越敏感,这意味着采用不同数据训练的模型差异会很大,导致对同一个样本预测值的波动较大,即方差很大。

c) 为随机误差,无法预测。

过拟合(overfitting)与欠拟合(underfitting)

  1. Overfitting,当我们的模型太复杂(比如很深的决策树、非常多的特征工程、大型深度学习网络等),模型偏差较低,方差较大;
  2. Underfitting,当我们的模型太简单(线性回归、无特征工程、浅层感知机等),模型偏差较大,方差较小;过拟合和欠拟合都不是我们想要的模型状态,如下图所示,最好的状态时偏差和方差都处于比较小的均衡状态,这时候总体误差最小。
    在这里插入图片描述

集成学习为什么有效?

集成学习指建模时训练多个基模型,预测时候融合多个模型预测结果,降低总体误差的学习方法。集成学习方法有很多,总体上可以分为三类:Stacking,Bagging 及 Boosting.
在这里插入图片描述
降低模型方差

可以看出不管是哪种模型集成方法,都有一个共同特点:融合多个模型预测结果。由统计知识可知,多个独立同分布随机变量满足:

X 1 , X 2 , … , X n X_1, X_2, \ldots, X_n X1,X2,,Xn 是独立同分布的,满足 E ( X i ) = μ , D ( X i ) = σ 2 , i = 1 , 2 , 3 , … , n E(X_i) = \mu, D(X_i) = \sigma^2, i = 1, 2, 3, \ldots, n E(Xi)=μ,D(Xi)=σ2,i=1,2,3,,n

则随机变量 X ‾ = 1 n ∑ i = 1 n X i \overline{X} = \frac{1}{n}\sum_{i=1}^n X_i X=n1i=1nXi,满足 E ( X ‾ ) = μ , D ( X ‾ ) = σ 2 n E(\overline{X}) = \mu, D(\overline{X}) = \frac{\sigma^2}{n} E(X)=μ,D(X)=nσ2

下证:

E ( X ‾ ) = E ( 1 n ∑ i = 1 n X i ) = 1 n ∑ i = 1 n E ( X i ) = 1 n ⋅ n μ = μ E(\overline{X}) = E\left(\frac{1}{n} \sum_{i=1}^n X_i\right) = \frac{1}{n} \sum_{i=1}^n E(X_i) = \frac{1}{n} \cdot n\mu = \mu E(X)=E(n1i=1nXi)=n1i=1nE(Xi)=n1nμ=μ

D ( X ‾ ) = D ( 1 n ∑ i = 1 n X i ) = 1 n 2 ∑ i = 1 n D ( X i ) = 1 n 2 ⋅ n σ 2 = σ 2 n D(\overline{X}) = D\left(\frac{1}{n} \sum_{i=1}^n X_i\right) = \frac{1}{n^2} \sum_{i=1}^n D(X_i) = \frac{1}{n^2} \cdot n \sigma^2 = \frac{\sigma^2}{n} D(X)=D(n1i=1nXi)=n21i=1nD(Xi)=n21nσ2=nσ2

其中随机变量的简单算术平均可以看成模型融合结果,只要不同模型预测结果满足独立同分布,模型预测方差将从原本的 σ 2 \sigma^2 σ2 变为 σ 2 n \frac{\sigma^2}{n} nσ2,大幅度降低了总体误差中的方差部分。当然这是最理想情况了,一般来说模型间都存在一定的相关性,相关性越弱,融合后预测方差越低。

因此在集成学习中,构造模型间的差异化是重中之重。在 bagging 中,我们通过采用不同的训练数据构造差异化。

降低模型偏差
在这里插入图片描述从上图可以看出,融合多个弱模型(相对概念,指复杂度比较低的模型),可以降低模型偏差,获得更高的模型精度。

Blending 模型集成

将数据划分为训练集和验证集
在这里插入图片描述

在这里插入图片描述

  1. 在训练集上训练模型(m1, m2, m3, …)

  2. 在验证集上预测,得到模型(m1, m2, m3, …)的预测结果

  3. 使用模型验证集预测结果作为特征,训练分类(例如逻辑回归)或回归(例如线性回归)模型,也可以人工指定权重,对模型(m1, m2, m3, …)的预测结果进行加权平均。例如在分类问题中将(m1, m2, m3, …)的预测概率进行加权,权重和为1。

Stakcing 模型集成

在这里插入图片描述
Stacking 模型集成方法和 Blending 方法非常类似,通过一个 meta model 对不同类别的基模型预测结果进行集成。Stacking 采用的基模型通常是不同种类的,算法流程如下:

  1. 将数据集划分成3部分:subset1, subset2, subset3。

  2. 在 subset1 上训练不同种类的基模型(比如:逻辑回归、决策树等)。

  3. 在 subset2 上,基模型进行预测

  4. 在 subset2 上,使用第3步中的预测结果作为输入,训练一个 meta 模型,通常 meta 模型我们尽量采用复杂度较低的简单模型,比如线性回归或逻辑回归,避免过拟合。

  5. 在 subset3 上,基模型进行预测,预测结果输入到 meta 模型进行预测,得到最终预测结果,测试模型精度。

Stacking 简化变体 Average / Weighted

很多时候,为了简化 stacking 模型集成或降低过拟合,我们不需要训练 meta 模型,可以直接将基模型预测值进行平均或加权平均即可。这时候我们的工作流变成:

  1. 将数据集划分成两部分:subset1 和 subset2。
  2. 在 subset1 上训练不同种类的基模型(比如:逻辑回归、决策树等)。
  3. 在 subset2 使用基模型进行预测,并对所有基模型预测的结果计算平均值(或进行加权平均)得到最终预测结果,测试模型精度。

如果采用加权平均,一般建议精度更高的模型更高的权重。例如有模型 A/B/C,精度模型 A > B > C,可以给予权重 A: 0.5, B: 0.3, C: 0.2。如果你不想调整权重而求最优权重,这时候可以等价于引入一个线性模型,在搜索线性模型参数时,来防止过拟合。这个时候建议采用完整 stacking 模型集成方案。

需要注意的是,在进行分类问题建模时通常进行概率融合。例如在使用逻辑回归进行分类时,使用 predict_proba 方法可以得到预测概率结果,预测结果为 N x 2 维度,2 为类别数量,分别代表输入样本和正确类别的概率。概率值融合后,使用 np.argmax(pred_result, axis=1) 即可得到每个样本最高概率的类别。

>>> from sklearn.datasets import load_iris
>>> from sklearn.linear_model import LogisticRegression
>>> X, y = load_iris(return_X_y=True)
>>> clf = LogisticRegression(random_state=0).fit(X, y)
>>> clf.predict(X[:2, :])
array([0, 0])
>>> clf.predict_proba(X[:2, :])
array([[9.8...e-01, 1.8...e-02, 1.4...e-08],[9.7...e-01, 2.8...e-02, 2.2...e-08]])
>>> clf.score(X, y)
0.97

Bagging模型集成

在这里插入图片描述

Bagging 模型集成算法流程:

  1. 通过 放回抽样 得到多个训练集
  2. 在不同的训练集上训练基模型(一般采用相同类型的模型)
  3. 对模型预测结果进行融合

一般的,我们将使用决策树作为基模型的 Bagging 集成学习方法叫做 随机森林,同时由于决策树本身是一种拟合能力比较强的模型,为了最大化模型差异化,在训练每棵决策树时进行特征采样,使得不同子模型使用的数据集不仅样本不同,同时使用的特征也不完全一致。在 sklearn 库中已经有成熟的随机森林实现,可以直接调用。

from sklearn.ensemble import RandomForestClassifierRandomForestClassifier(n_estimators=100,max_depth=None,max_features='auto',max_leaf_nodes=None,
)

参数解释:

参数解释
n_estimators设置基模型数量
max_depth树的最大深度
max_features寻找最佳分割时要考虑的特征数量
max_leaf_nodes允许的最大叶子节点数量

随机森林的特点:

  1. 并行的集成框架,适合并行训练,训练速度快。
  2. 特征随机采样使得在样本特征维度很高的时候,仍然能有效的训练模型。
  3. 数据集随机采样 & 特征随机采样的引入,使得随机森林的基模型能构造较大的差异化,降低融合模型方差,提升泛化能力,避免过拟合。
  4. 因为 Bagging 主要降低模型方差,因此一般选择偏差较小的大型决策树(深度较深,叶子节点数量高)作为基模型,来平衡偏差和方差。

Boosting模型集成

与Bagging相反,Boosting采用串行的集成框架,常见的算法流程如下图所示:

  1. 从数据集中均匀采样一个子集
  2. 在子集上训练模型并对整个数据集进行预测
  3. 计算每个样本误差
  4. 根据误差大小对数据集样本赋权(误差越大,权重越大),并使用新的权重对数据集进行采样,得到一个新的子集
  5. 重复2~4,直到达到预设的迭代次数在这里插入图片描述
    Boosting集成学习通过迭代训练,逐步降低模型偏差,因此我们一般采用比较简单的基模型(浅层决策树),
    避免过拟合发生。
    sklearn已经实现了Boosting集成学习方法,可以通过
    sklearn.ensemble.AdaBoostClassifier直接调用,使用方法和参数与随机森林类似。
    Boosting模型集成特点:
  6. 串行集成方法,比较难并行化,速度较慢
  7. 能有效降低偏差,适合采用简单的基模型

作业

  1. 回答在进行平均融合时,基模型具有怎样的特点能够最大化提升模型性能?
  2. 在链接: Kaggle泰坦尼克竞赛中使用逻辑回归、决策数、随机森林建模,对模型预测概率采用加权平均的方式进行模型融合,观察融合效果,是否较单模型有提升

相关文章:

4.系统学习-集成学习

集成学习 前言Bias and Variance过拟合(overfitting)与欠拟合(underfitting)集成学习为什么有效?Blending 模型集成Stakcing 模型集成Bagging模型集成Bagging 模型集成算法流程:Boosting模型集成作业 前言 …...

Max AI prompt2:

1,prompt1——总体概览 “请根据以下指导原则撰写文献解读,特别关注作者的研究思路和方法论: 1. 研究背景与目的: 概述文章研究的背景,明确研究的主要目的和研究问题。 2. 研究思路: 详细描述作者如何构建…...

[Unity Shader][图形渲染]【游戏开发】 Shader数学基础8 - 齐次坐标

在计算机图形学中,齐次坐标是一种方便计算和表示几何变换的方式。通过将三维空间中的 33矩阵扩展为 44的形式,可以统一表示平移、旋转、缩放等几何变换操作。在本篇文章中,我们将详细解析齐次坐标的定义及其在图形变换中的应用。 什么是齐次坐标? 齐次坐标的核心思想是通过…...

挑战一个月基本掌握C++(第十二天)了解命名空间,模板,预处理器

一 命名空间 假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。 同样的情况也出现在 …...

python实现根据搜索关键词爬取某宝商品信息

当程序打开淘宝登陆页面后,需要快速手动登录淘宝,如果服务报错,需要重新登录! pip安装库 pip install pyquery pip install selenium pip install openpyxl # 代码说明:代码功能: 基于ChromeDriver爬取tao…...

Posison Distribution

泊松分布 (Poisson Distribution) 泊松分布是概率论中的一个重要离散分布,描述单位时间或单位空间内随机事件发生的次数,假设事件是独立的且平均发生率是已知的。 定义 泊松分布的概率质量函数 (PMF) 为: P ( X k ) λ k e − λ k ! , …...

2024年最新多目标优化算法:多目标麋鹿群优化算法(MOEHO)求解ZDT1-ZDT4,ZDT6及工程应用---盘式制动器设计,提供完整MATLAB代码

一、麋鹿群优化算法 麋鹿群优化算法(Elephant Herding Optimization,EHO)是2024年提出的一种启发式优化算法,它的灵感来自麋鹿群的繁殖过程。麋鹿有两个主要的繁殖季节:发情和产犊。在发情季节,麋鹿群分裂…...

使用Webpack构建微前端应用

英文社区对 Webpack Module Federation 的响应非常热烈,甚至被誉为“A game-changer in JavaScript architecture”,相对而言国内对此热度并不高,这一方面是因为 MF 强依赖于 Webpack5,升级成本有点高;另一方面是国内已…...

Apache RocketMQ 5.1.3安装部署文档

官方文档不好使,可以说是一坨… 关键词:Apache RocketMQ 5.0 JDK 17 废话少说,开整。 1.版本 官网地址,版本如下。 https://rocketmq.apache.org/download2.配置文件 2.1namesrv端口 在ROCKETMQ_HOME/conf下 新增namesrv.pro…...

CMS(Concurrent Mark Sweep)垃圾回收器的具体流程

引言 CMS(Concurrent Mark Sweep)收集器是Java虚拟机中的一款并发收集器,其设计目标是最小化停顿时间,非常适合于对响应时间敏感的应用。与传统的串行或并行收集器不同,CMS能够尽可能地让垃圾收集线程与用户线程同时运…...

【Linux】Socket编程-UDP构建自己的C++服务器

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 UDP 网络编程 🦋 接口讲解🦋 V1 版本 - echo server🦋 V2 版本 - DictServer🦋 V3 版本 - 简单聊天室 二&a…...

磁盘结构、访问时间、调度算法

目录 一、什么是磁盘? 二、磁盘分类 1、从磁头分 2、通过盘面分 三、一次磁盘读/写的时间 四、磁盘调度算法 1、先来先到服务算法FCFS 2、最短寻找时间优先SSTF 3、扫描算法(SCAN) 4、LOOk算法 5、循环扫描算法(C-SCAN…...

详解归并排序

归并排序 归并排序的基本概念归并排序的详细步骤1. 分解阶段2. 合并阶段3. 归并排序的递归流程 时间复杂度分析空间复杂度分析算法步骤2-路归并排序代码分析代码讲解1. 合并两个子数组的函数 merge()2. 归并排序函数 mergeSort()3. 打印数组的函数 printArray()4. 主函数 main(…...

45.在 Vue 3 中使用 OpenLayers 鼠标点击播放视频

引言 在 Web 开发中,地图可视化和互动功能是越来越重要的应用场景。OpenLayers 是一个强大的开源 JavaScript 库,用于显示和处理地图数据,支持多种地图服务和交互功能。在这个教程中,我们将介绍如何在 Vue 3 中集成 OpenLayers&a…...

《大话Java+playWright》系列教程初级篇-初识

后续代码会整理开源-大家期待吧!!! 首先讲下为啥不用python,因为不想下载各种安装插件,太麻烦了,好多不兼容。 所以选择了java。 先来讲下什么是playwright,playwright是微软开源自动化测试工…...

05.HTTPS的实现原理-HTTPS的握手流程(TLS1.2)

05.HTTPS的实现原理-HTTPS的握手流程(TLS1.2) 简介1. TLS握手过程概述2. TLS握手过程细化3. 主密钥(对称密钥)生成过程4. 密码规范变更 简介 主要讲述了混合加密流程完成后,客户端和服务器如何共同获得相同的对称密钥…...

提示词工程

一、六何分析法快速写出准确的提示词 英文单词中文解释提问时的思考示例Why何故问题的背景,包括为什么做及目标(做成什么样)最近我们要与某品牌合作推广冲牙器,对方需要我们策划一场营销活动What何事具体是什么事写一个营销策划方…...

基于python网络爬虫的搜索引擎设计

一、毕业设计(论文)题目:基于网络爬虫的搜索引擎设计 - 基于网络爬虫的搜索引擎设计1 二、毕业设计(论文)工作自 2022-09-01 起至 2022-10-28 止 三、毕业设计(论文)内容要求: 主…...

ip-协议

文章目录 1. 网络层2. ip协议2.1 ip协议格式2.2 网段划分基本概念网段划分的两种方式为什么要网段划分?特殊的IP地址IP地址数量不足 2.3 私有IP与公网IP2.4 路由 3. IP的分片与组装为什么要分片与组装?如何分片?如何组装? 1. 网络…...

Git(11)之log显示支持中文

Git(11)之log显示支持中文 Author:Once Day Date:2024年12月21日 漫漫长路有人对你微笑过嘛… 参考文档:GIT使用log命令显示中文乱码_gitlab的log在matlab里显示中文乱码-CSDN博客 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSD…...

OpenLayers 可视化之热力图

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...

MeshGPT 笔记

[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭&#xff01;_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...