模式识别与机器学习(七):集成学习

news2025/1/31 3:10:35

集成学习

  • 1.概念
    • 1.1 类型
    • 1.2 集成策略
    • 1.3 优势
  • 2. 代码实例
    • 2.1boosting
    • 2.2 bagging
    • 2.3 集成

1.概念

在这里插入图片描述

集成学习是一种机器学习方法,旨在通过组合多个个体学习器的预测结果来提高整体的预测性能。它通过将多个弱学习器(个体学习器)组合成一个强学习器,以获得更准确、更稳定的预测结果。

在集成学习中,个体学习器可以是同质的(使用相同的学习算法,但在不同的训练集上训练)或异质的(使用不同的学习算法)。集成学习的核心思想是通过个体学习器之间的合作和协同来提高整体的预测性能。
在这里插入图片描述

1.1 类型

集成学习可以分为两种主要类型:bagging和boosting。

  1. Bagging(自助聚集法):Bagging是一种基于自助采样的集成学习方法。它通过从原始训练集中有放回地随机采样生成多个新的训练集,然后使用这些训练集分别训练多个个体学习器。最后,通过对个体学习器的预测结果进行投票或平均来得到最终的集成预测结果。常见的Bagging方法包括随机森林(Random Forest)。

  2. Boosting(提升法):Boosting是一种迭代的集成学习方法。它通过依次训练多个个体学习器,每个个体学习器都试图纠正前一个学习器的错误。在每一轮迭代中,Boosting根据样本的权重调整训练集,使得前一个学习器预测错误的样本在后续的训练中得到更多的关注。最终,通过对个体学习器的加权组合来得到最终的集成预测结果。常见的Boosting方法包括AdaBoost、Gradient Boosting和XGBoost。

1.2 集成策略

集成策略是集成方法中用于合并个体学习器预测结果的策略。它决定了如何将个体学习器的预测结果组合起来得到最终的集成预测结果。下面是一些常见的集成策略:

  1. 投票(Voting):对于分类问题,投票是一种常见的集成策略。每个个体学习器对样本进行预测后,最终的预测结果是通过多数投票来决定的。例如,如果有5个个体学习器,其中3个预测为类别A,2个预测为类别B,则最终的预测结果为类别A。

  2. 平均(Averaging):对于回归问题,平均是一种常见的集成策略。每个个体学习器对样本进行预测后,最终的预测结果是通过对个体学习器的预测结果进行平均得到的。例如,如果有5个个体学习器,它们的预测结果分别为[1.2, 1.5, 1.3, 1.4, 1.6],则最终的预测结果为平均值1.4。

  3. 加权平均(Weighted Averaging):加权平均是一种对平均策略的扩展,它给不同的个体学习器赋予不同的权重。权重可以根据个体学习器的性能或其他因素进行分配。例如,性能较好的个体学习器可以被赋予更高的权重,从而在集成预测中起到更大的作用。

  4. 堆叠(Stacking):堆叠是一种更高级的集成策略,它通过训练一个元学习器来组合多个个体学习器的预测结果。在堆叠中,首先将训练集分成多个子集,每个子集用于训练不同的个体学习器。然后,使用这些个体学习器对测试集进行预测,并将它们的预测结果作为新的特征输入到元学习器中进行训练和预测。

这些集成策略可以根据具体的问题和需求进行选择和组合。不同的集成策略适用于不同的情况,可以根据个体学习器的性能、数据集的特点和任务的要求来选择最合适的集成策略。

1.3 优势

集成学习的优势在于它能够通过组合多个个体学习器的优势来弥补单个学习器的缺点,从而提高整体的泛化能力和鲁棒性。它在许多机器学习任务中都取得了很好的效果,并成为了一种常用的技术。

2. 代码实例

2.1boosting

Boosting是一种集成学习方法,通过迭代训练一系列基本学习器,每个基本学习器都会根据前一个学习器的表现进行调整,以提高整体性能。下面是Boosting的详细介绍:
在这里插入图片描述

  1. 基本概念:Boosting的核心思想是将多个弱学习器组合成一个强学习器。弱学习器是指在某个学习任务上表现略好于随机猜测的学习器,而强学习器则是在该任务上表现较好的学习器。

  2. 迭代过程:Boosting通过迭代的方式生成一系列基本学习器。每个基本学习器都会根据前一个学习器的表现进行调整,使得前一个学习器在错误样本上的权重增加,从而更加关注错误样本,提高整体性能。

  3. 加权投票:在预测阶段,Boosting会对每个基本学习器进行加权投票,将各个学习器的预测结果进行加权组合,得到最终的预测结果。通常,表现较好的学习器会被赋予更高的权重。

  4. AdaBoost算法:AdaBoost是Boosting的一种经典算法。它通过调整样本的权重来训练基本学习器,每个基本学习器的权重由前一个学习器的错误率决定。AdaBoost在每一轮迭代中,都会调整样本的权重,使得前一个学习器错误分类的样本权重增加,从而使得后续学习器更加关注这些错误样本。

  5. Gradient Boosting算法:Gradient Boosting是另一种常用的Boosting算法。它通过梯度下降的方式训练基本学习器,每个基本学习器都会拟合前一个学习器的残差。Gradient Boosting在每一轮迭代中,都会计算残差,并将残差作为新的目标进行训练。

Boosting是一种强大的集成学习方法,能够有效提高模型的性能。它在实际应用中广泛使用,如梯度提升树(Gradient Boosting Trees)和XGBoost等。
以下是一个使用Python中的scikit-learn库实现AdaBoost算法的简单代码示例:

from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成一个示例数据集
X, y = make_classification(n_samples=100, n_features=10, random_state=42)

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建AdaBoost分类器
clf = AdaBoostClassifier(n_estimators=50, random_state=42)

# 在训练集上拟合分类器
clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

在这个示例中,我们首先使用make_classification函数生成一个包含100个样本和10个特征的示例数据集。然后,我们将数据集拆分为训练集和测试集。接下来,我们创建一个AdaBoost分类器,并使用训练集对其进行拟合。最后,我们使用测试集进行预测,并计算预测准确率。

2.2 bagging

Bagging(Bootstrap Aggregating)是一种集成学习方法,通过随机有放回抽样生成多个训练集,每个训练集用于训练一个基本学习器,最后通过投票或平均来进行预测。下面是Bagging的详细介绍:
在这里插入图片描述

  1. 基本概念:Bagging的核心思想是通过构建多个基本学习器的集合来提高整体性能。每个基本学习器都是在不同的训练集上独立训练得到的,最后通过集成基本学习器的预测结果来进行最终的预测。

  2. Bootstrap抽样:Bagging使用Bootstrap抽样技术生成多个训练集。Bootstrap抽样是一种有放回的抽样方法,从原始训练集中随机抽取样本,生成与原始训练集大小相同的新训练集。由于有放回抽样,新训练集中可能包含重复的样本,也可能有部分样本未被抽到。

  3. 基本学习器:每个训练集用于训练一个基本学习器。基本学习器可以是同一种学习算法的不同实例,也可以是不同的学习算法。通过在不同的训练集上独立训练基本学习器,可以获得多个学习器的集合。

  4. 集成预测:在预测阶段,Bagging通过对基本学习器的预测结果进行投票(分类问题)或平均(回归问题)来得到最终的预测结果。对于分类问题,可以采用多数投票的方式,选择预测结果最多的类别作为最终预测结果。

  5. 随机森林(Random Forest):随机森林是一种基于Bagging和决策树的集成学习方法。它通过随机选择特征子集和样本子集来构建多个决策树,并通过投票来进行预测。随机森林在每个决策树的训练过程中,都会使用随机选择的特征子集,以增加模型的多样性。

Bagging是一种简单而有效的集成学习方法,能够减少模型的方差,提高模型的稳定性和泛化能力。它在实际应用中广泛使用,如随机森林和Bagging分类器等。
以下是一个使用Python中的scikit-learn库实现Bagging算法的简单代码示例:

from sklearn.ensemble import BaggingClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier

# 生成一个示例数据集
X, y = make_classification(n_samples=100, n_features=10, random_state=42)

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建基本学习器(决策树)
base_estimator = DecisionTreeClassifier()

# 创建Bagging分类器
clf = BaggingClassifier(base_estimator=base_estimator, n_estimators=50, random_state=42)

# 在训练集上拟合分类器
clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

在这个示例中,我们首先使用make_classification函数生成一个包含100个样本和10个特征的示例数据集。然后,我们将数据集拆分为训练集和测试集。接下来,我们创建一个基本学习器(这里使用决策树),并使用基本学习器创建一个Bagging分类器。最后,我们使用训练集对Bagging分类器进行拟合,并使用测试集进行预测,计算预测准确率。

2.3 集成

这是一个使用投票策略的集成分类器的示例代码。以下是一个使用Python编写的示例:

from sklearn.ensemble import VotingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义三个不同的分类器
clf1 = DecisionTreeClassifier(random_state=42)
clf2 = KNeighborsClassifier()
clf3 = SVC(probability=True)

# 定义投票分类器
voting_clf = VotingClassifier(estimators=[('dt', clf1), ('knn', clf2), ('svc', clf3)], voting='hard')

# 训练投票分类器
voting_clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = voting_clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)

在这个示例中,我们使用了三个不同的分类器(决策树、K近邻和支持向量机)来构建一个投票分类器。通过VotingClassifier类,我们将这三个分类器组合在一起,并使用voting='hard'来指定使用硬投票策略。然后,我们使用训练集对投票分类器进行训练,并在测试集上进行预测。最后,我们使用accuracy_score函数计算预测结果的准确率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1279026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[蓝桥杯 2019 省 B] 特别数的和-C语言的解法

小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 n 中,所有这样的数的和是多少&…

如何创建一个vue工程

1.打开vue安装网址:安装 | Vue CLI (vuejs.org) 2.创建一个项目文件夹 3.复制地址 4.打开cmd,进入这个地址 5.复制粘贴vue网页的安装命令 npm install -g vue/cli 6.创建vue工程 vue create vue这里可以通过上下键来进行选择。选最后一个选项按回车。 …

【MySQL】-日志系统

一、背景介绍 MySQL中提供了各种各样的日志,每一个日志在不同的阶段有不同的作用,对数据的一致性和正确性得到保障,为数据恢复也提供至关重要的作用,那今天我们一起来讨论讨论MySQL中的各个日志 二、正文 binlog:…

Linux C/C++ 分析网络流量(十六进制TCP数据包分析)

在分析TCP数据包时,理解TCP协议的工作原理和报文格式是关键。TCP是一种面向连接的、提供可靠的、端到端的字节流传输服务。其头部结构包括源端口、目标端口、序列号、确认应答号等字段。序列号是在建立连接时由计算机生成的随机数作为初始值,每发送一次数…

人工智能学习4(特征选择)

编译工具:PyCharm 有些编译工具在绘图的时候不需要写plt.show()或者是print就可以显示绘图结果或者是显示打印结果,pycharm需要(matplotlib.pyplot) 文章目录 编译工具:PyCharm 特征选择嵌入法特征选择练习&#xff…

K8S客户端二 使用Rancher部署服务

Rancher容器云管理平台 本博客中使用了四台服务器,如下 rancher服务器k8s-masterk8s-worker01k8s-worker02 一、主机硬件说明 序号硬件操作及内核1CPU 4 Memory 4G Disk 100GCentOS72CPU 4 Memory 4G Disk 100GCentOS73CPU 4 Memory 4G Disk 100GCentOS74CPU 4 …

如何确定短线的买入卖出时机?

短线投资制胜的一个关键能力,就是精准地找到买入卖出时机。那么,怎么样才能获得这种关键能力呢? 在这节课里,我们将给大家梳理一下常见的短线买入卖出时机,并通过案例讲解帮助大家理解。话不多说,赶紧进入主…

[论文阅读]Generalized Attention——空间注意力机制

Generalized Attention An Empirical Study of Spatial Attention Mechanisms in Deep Networks 论文网址:Generalized Attention 论文代码:文章最后有GeneralizedAttention的实现代码 简读论文 本文主要研究了深度学习网络中的注意力机制。作者们从不…

VR 实现 Splash Screen 效果

文章目录 背景官方实现逆向分析 背景 手机 App 在实现 Splash Screen 的时候,目前都有成熟的方案可以参考,但是在做 VR 开发时,要如何实现一个 App 自己的 Splash Screen ,下面是我们基于 PICO & OCULUS 进行业务开发时经过探…

Postman被低估的功能 — 自动化接口测试

| 背景 该篇文章针对已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。 当前环境: Window 7 - 64 Postman 版本(免费版):Chrome App v5.5.3 不同版本页面 U…

Hdoop学习笔记(HDP)-Part.17 安装Spark2

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

Mac卸载、安装Python

卸载 说明 对于删除 Python,我们首先要知道其具体都安装了什么,实际上,在安装 Python 时,其自动生成: Python framework,即 Python 框架;Python 应用目录;指向 Python 的连接。 …

node.js-连接SQLserver数据库

1.在自己的项目JS文件夹中建文件:config.js、mssql.js和server.js以及api文件夹下的user.js 2.在config.js中封装数据库信息 let app {user: sa, //这里写你的数据库的用户名password: ,//这里写数据库的密码server: localhost,database: medicineSystem, // 数据…

Vue + Element ui 实现动态表单,包括新增行/删除行/动态表单验证/提交功能

原创/朱季谦 最近通过Vue Element ui实现了动态表单功能,该功能还包括了动态表单新增行、删除行、动态表单验证、动态表单提交功能,趁热打铁,将开发心得记录下来,方便以后再遇到类似功能时,直接拿来应用。 简化的页…

C-语言每日刷题

目录 [蓝桥杯 2015 省 A] 饮料换购 题目描述 输入格式 输出格式 输入输出样例 # [蓝桥杯 2023 省 A] 平方差 题目描述 输入格式 输出格式 输入输出样例 说明/提示 【样例说明】 [NOIP2001 普及组] 数的计算 题目描述 输入格式 输出格式 输入输出样例 说明/提示 样例 1 解释 数据…

Halcon tiff 点云读取以及平面矫正

一、读取tiff 图 dev_close_window () dev_open_window (0, 0, 512, 512, black, WindowHandle)xResolution:0.0025 yResolution:0.0025 zResolution:0.001 read_image (IntputImage, C:/Users/alber/Desktop/2023-08-15_16-38-24-982_/Sta5_002.tif) zoom_image_factor (Intpu…

Ext4文件系统解析(二)

1、前言 想要了解EXT文件系统的工作原理,那了解文件系统在磁盘上的分布就是必不可少的。这一节主要介绍EXT文件系统硬盘存储的物理结构。 由于当前主流的CPU架构均采用小端模式,因此下文介绍均已小端模式为准。 2、超级块 2.1 属性 下表列举出超级块…

docker-速通

1.命令-镜像操作 docker pull nginx #下载最新版 docker pull nginx:1.20.1 #下载指定版本 镜像名:版本名(标签) docker images #查看所有镜像 # 如果只写镜像名实际就是redis redis:latest 记住这个不是命令 docker rmi 镜像名:版本号/镜像id…

Java Throwable

如图展示了 Java 整个异常体系的关系。 Throwable 的 Java 异常体系的基类, 他的直接子类有 Error 和 Exception 2 个。 1 Error Error 表示的是由于系统错误, Java 虚拟机抛出的异常, 例如 Java 虚拟机崩溃, 内存不够等, 这种情况仅凭程序自身是无法处理的, 在程序中也不会…

第十一节HarmonyOS 常用容器组件1-Row与Column

Column&Row组件的使用 1、概述 容器组件是一种比较特殊的组件,它可以包含其他的组件,而且按照一定的规律布局,帮助开发者生成精美的页面。容器组件除了放置基础组件外,也可以放置容器组件,通过多层布局的嵌套&am…