机器学习(七)——集成学习(个体与集成、Boosting、Bagging、随机森林RF、结合策略、多样性增强、多样性度量、Python源码)

目录

  • 关于
  • 1 个体与集成
  • 2 Boosting
  • 3 Bagging与随机森林
  • 4 结合策略
  • 5 多样性
  • X 案例代码
    • X.1 分类任务-Adaboost-SVM
      • X.1.1 源码
      • X.1.2 数据集(鸢尾花数据集)
      • X.1.3 模型效果
    • X.2 分类任务-随机森林RF
      • X.2.1 源码
      • X.2.2 数据集(鸢尾花数据集)
      • X.2.3 模型效果


关于

  • 本文是基于西瓜书(第八章)的学习记录。内容包括个体学习和集成学习,集成学习介绍了Boosting方法、Bagging方法和随机森林。还讲解了集成学习的结合策略、多样性分析等等,文章附Python实现源码。
  • 西瓜书电子版:百度网盘分享链接

1 个体与集成

  • 集成学习通过构建并结合多个学习器来完成任务,有时也被称为多分类器系统或基于委员会的学习等。
  • 集成学习通过结合多个个体学习器来获得比单一学习器更优越的泛化性能。
  • 同质集成与异质集成
    • 同质集成:集成的是同种类型的个体学习器
    • 异质集成:集成的是不同类型的个体学习器
  • 基学习器:同质集成中的个体学习器也称“基学习器”,相应的学习算法称为“基学习算法”
  • 获得好的集成的关键:个体学习器应“好而不同”,即个体学习器要有一定的“准确性”,即学习器不能太坏,并且要有“多样性”,即学习器间具有差异。事实上,如何产生好而不同的个体学习器是研究集成学习的核心。
  • 集成学习方法分类:
    • 个体学习器间存在强依赖关系、必须串行生成的序列化方法,代表是Boosting。
    • 个体学习器间不存在强依赖关系、可同时生成的并行化方法,代表是Bagging和随机森林。
  • 弱学习器
    • 弱学习器的性能略优于随机猜测

2 Boosting

  • Boosting是一族可以将弱学习器提升为强学习器的算法。这族算法的工作机制类似:
    • 从初始训练集训练出一个基学习器
    • 根据基学习器的表现对训练样本分布进行调整
    • 重复进行直至基学习器数目达到指定值T
    • 最终将这T个基学习器进行加权结合
  • Boosting算法要求基学习器能对特定的数据分布进行学习
    • 重赋权法:在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重
    • 重采样法:对无法接受带权样本的基学习算法,可在每一轮学习中,根据样本分布对训练集重新进行采样,再用重采样而得的样本集对基学习器进行训练

3 Bagging与随机森林

  • Bagging和随机森林是并行式集成学习方法,通过从原始训练集中采样产生不同的子集来训练基学习器。

  • 为了使基学习器具有明显差异,一种可能的做法是对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器。但是为了保证基学习器效果不是太差,可以使用相互有交叠的子集。

  • Bagging

    • 使用自助采样法(采样后放回袋子,样本可能被重复采集)产生多个训练样本子集
    • 每个子集训练出一个基学习器
    • 在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法.
    • 训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶,
    • 与标准AdaBoost只适用于二分类任务不同,Bagging能不经修改地用于多分类、回归等任务.
    • 自助采样时包外样本的用处:当基学习器是决策树时,可使用包外样本来辅助剪枝,或用于估计决策树中各结点的后验概率以辅助对零训练样本结点的处理;当基学习器是神经网络时,可使用包外样本来辅助早期停止以减小过拟合风险.
  • 随机森林

    • RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择:在选择最佳划分属性时,先随机选择k个属性构成子集,然后从中找到最佳属性,这里k控制了随机性的引入程度。推荐 k = log ⁡ 2 d k=\log_2d k=log2d
    • 通过样本扰动和属性扰动增加基学习器的多样性
    • 随机森林简单、容易实现、计算开销小,令人惊奇的是,它在很多现实任务中展现出强大的性能,被誉为“代表集成学习技术水平的方法”

4 结合策略

集成学习中的结合策略是将多个基学习器的预测结果结合起来以提高整体性能。

  • 数值型输出:平均法

    • 简单平均法:直接计算所有基学习器预测结果的平均值
    • 加权平均法:根据基学习器的权重计算加权平均值
    • 加权平均法的权重一般是从训练数据中学习而得,现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。加权平均法未必一定优于简单平均法
    • 在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法
  • 分类型输出:投票法

    • 绝对多数投票法:得票过半数的类别作为预测结果,否则拒绝预测,这在可靠性要求较高的学习任务中是一个很好的机制
    • 相对多数投票法:得票最多的类别作为预测结果
    • 加权投票法:根据基学习器的权重进行投票
    • 虽然分类器估计出的类概率值一般都不太准确,但基于类概率进行结合却往往比直接基于类标记进行结合性能更好.
  • 学习法:Stacking

    • 当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合
    • 我们把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器
    • Stacking先从初始数据集训练出初级学习器,然后“生成” 一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记

5 多样性

  • 误差分歧分解:个体学习器准确性越高、多样性越大,则集成越好。

    • 误差(E):个体学习器误差的加权均值。
    • 分歧(A):个体学习器的加权分歧值。
    • 集成的泛化误差: E = E ‾ − A ‾ E=\overline{E}-\overline{A} E=EA,该式明确提示出:个体学习器准确性越高、多样性越大,则集成越好。
  • 多样性度量
    在这里插入图片描述

    • 不合度量

      • dis = (b+c) / m
      • 值越大表示多样性越大。
    • 相关系数(Correlation Coefficient):

      • p_ij = (ad - bc) / sqrt((a+b)(a+c)(c+d)(b+d)))
      • 值为0表示分类器无关,正值表示正相关,负值表示负相关。
    • Q-统计量(Q-Statistic):

      • Q = (ad - bc) / (ad + bc)
      • 与相关系数符号相同,但值域更宽。
    • K-统计量(K-Statistic):

      • K = (P1 - P2) / (1 - P2)
      • 其中P1是两个分类器取得一致的概率,P2是两个分类器偶然达成一致的概率。
  • 多样性增强

    • 数据样本扰动

      • 通过自助采样等方法从初始数据集中产生不同的数据子集,训练出不同的个体学习器。
      • 数据样本扰动法对“不稳定基学习器”效果好
        • 不稳定基学习器:对训练样本敏感,如决策树和神经网络。
        • 稳定基学习器:线性学习器、支持向量机、朴素贝叶斯、k 近邻学习器
    • 输入属性扰动

      • 从初始属性集中抽取出若干个属性子集,基于每个属性子集训练一个基学习器。
      • 对包含大量冗余属性的数据,在子空间中训练个体学习器不仅能产生多样性大的个体,还会因属性数的减少而大幅节省时间开销
    • 输出表示扰动

      • 对训练样本的类标记稍作变动,如“翻转法”随机改变一些训练样本的标记。
    • 算法参数扰动

      • 通过随机设置不同的参数,产生差别较大的个体学习器,如神经网络的隐层数量和神经元数量

X 案例代码

X.1 分类任务-Adaboost-SVM

X.1.1 源码

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report
import seaborn as sns# 1. 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
print("此时X,y的数据类型为:", type(X), type(y), '\n')# 2. 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("此时X_train,y_train的数据类型为:", type(X_train), type(y_train), '\n')
print("X_train的前10条数据展示:")
print(pd.DataFrame(X_train).head(10).to_string(index=False, justify='left'), '\n')# 3. 构建SVM基分类器并应用AdaBoost算法
base_svc = SVC(kernel='linear', probability=True, random_state=42)  # 使用线性核并启用概率预测
model = AdaBoostClassifier(estimator=base_svc, n_estimators=50, random_state=42)
model.fit(X_train, y_train)# 4. 预测测试集上的目标变量
y_pred = model.predict(X_test)# 5. 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print("模型准确率:", accuracy)
print("分类报告:")
print(classification_report(y_test, y_pred))# 6. 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted Labels')
plt.ylabel('True Labels')
plt.title('Confusion Matrix for Iris Dataset (AdaBoost with SVM)')
plt.tight_layout()
plt.show()# 可选:将结果保存到DataFrame中以便进一步分析
results = pd.DataFrame({'Actual': y_test,'Predicted': y_pred
})
print("模型预测结果:")
print(results.head())

X.1.2 数据集(鸢尾花数据集)

  • 鸢尾花数据集是机器学习领域中最著名的数据集之一,常被用于分类算法的测试和演示。

  • 概览

    • 样本数量:150个样本
    • 特征数量:4个特征
    • 标签种类数量:3个类别,每个类别有50个样本
  • 特征描述

    • 萼片长度 (sepal length):花萼的长度,单位为厘米。
    • 萼片宽度 (sepal width):花萼的宽度,单位为厘米。
    • 花瓣长度 (petal length):花瓣的长度,单位为厘米。
    • 花瓣宽度 (petal width):花瓣的宽度,单位为厘米。
  • 目标变量是鸢尾花的种类,共有三种:

    1. Iris setosa
    2. Iris versicolor
    3. Iris virginica
  • 使用

    • 可以使用 sklearn.datasets.load_iris() 函数来加载这个数据集,并查看其详细信息。

X.1.3 模型效果

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

X.2 分类任务-随机森林RF

X.2.1 源码

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report
import seaborn as sns# 1. 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
print("此时X,y的数据类型为:", type(X), type(y), '\n')# 2. 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("此时X_train,y_train的数据类型为:", type(X_train), type(y_train), '\n')
print("X_train的前10条数据展示:")
print(pd.DataFrame(X_train).head(10).to_string(index=False, justify='left'), '\n')# 3. 构建并训练随机森林分类模型
model = RandomForestClassifier(n_estimators=100, random_state=42)  # 使用100棵树的随机森林
model.fit(X_train, y_train)# 4. 预测测试集上的目标变量
y_pred = model.predict(X_test)# 5. 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print("模型准确率:", accuracy)
print("分类报告:")
print(classification_report(y_test, y_pred))# 6. 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted Labels')
plt.ylabel('True Labels')
plt.title('Confusion Matrix for Iris Dataset (Random Forest)')
plt.tight_layout()
plt.show()# 可选:将结果保存到DataFrame中以便进一步分析
results = pd.DataFrame({'Actual': y_test,'Predicted': y_pred
})
print("模型预测结果:")
print(results.head())

X.2.2 数据集(鸢尾花数据集)

  • 鸢尾花数据集是机器学习领域中最著名的数据集之一,常被用于分类算法的测试和演示。

  • 概览

    • 样本数量:150个样本
    • 特征数量:4个特征
    • 标签种类数量:3个类别,每个类别有50个样本
  • 特征描述

    • 萼片长度 (sepal length):花萼的长度,单位为厘米。
    • 萼片宽度 (sepal width):花萼的宽度,单位为厘米。
    • 花瓣长度 (petal length):花瓣的长度,单位为厘米。
    • 花瓣宽度 (petal width):花瓣的宽度,单位为厘米。
  • 目标变量是鸢尾花的种类,共有三种:

    1. Iris setosa
    2. Iris versicolor
    3. Iris virginica
  • 使用

    • 可以使用 sklearn.datasets.load_iris() 函数来加载这个数据集,并查看其详细信息。

X.2.3 模型效果

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

融合虚拟与现实,AR Engine为用户提供沉浸式交互体验

当今的应用市场中,传统的应用产品已经难以完全满足消费者的多样化需求。为了在竞争激烈的市场中脱颖而出,企业需要深入洞察用户需求,提供个性化的服务体验和差异化的产品创新,以吸引并留住消费者。 比如,购物类App通过…

「QT」几何数据类 之 QPolygon 多边形类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

.NET 一款替代cmd.exe的交互式命令渗透工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

跨境访问难题?SD-WAN跨境加速专线加速电商社交媒体推广

在全球化日益加深的今天,跨境电商已成为企业拓展国际市场的重要途径。然而,跨境电商在社交媒体平台进行推广时,常常面临一系列网络访问难题,如公网速度慢、员工办事效率低下、IP被封禁以及公司运维对网络维护的繁琐等。这些问题不…

让redis一直开启服务/自动启动

文章目录 你的redis是怎么打开的黑窗不能关?必须要自动启动吗?再说说mysql 本文的所有指令都建议在管理员权限下打开cmd控制台 推荐的以管理员身份打开控制台的方式 Win R 打开运行 输入cmdShift Ctrl Enter 你的redis是怎么打开的 安装过redis的朋友都知道, redis的安…

Python 分子图分类,GNN Model for HIV Molecules Classification,HIV 分子图分类模型;整图分类问题,代码实战

一、分子图 分子图(molecular graph)是一种用来表示分子结构的图形方式,其中原子被表示为节点(vertices),化学键被表示为边(edges)。对于HIV(人类免疫缺陷病毒&#xff…

vue项目实战

1.项目文件夹添加(结构如下) 2.页面构建 安装路由 npm install react-router-dom 3.页面基本模板 router文件夹下index.js的模板 // 引入组件 import Login from "../views/login"; // 注册路由数组 const routes [{// 首页默认是/path: …

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日,由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能,探索制造业数字化转型之路。 在苏州站活动开场,达索系统专业客户事业部华东区渠道经理马腾飞…

论文阅读《Structure-from-Motion Revisited》

摘要 增量式地运动结构恢复是从无序图像集合中进行三维重建的一个普遍策略。虽然增量式地重建系统在各个方面上都取得了巨大的进步,但鲁棒性、准确性、完整度和尺度仍然是构建真正通用管道的关键问题。我们提出了一种新的运动结构恢复技术,它改进了目前…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

Vue 组件传递数据-Props(六)

一、Props传递静态数据 defineProps() 和 defineEmits() 为了在声明 props 和 emits 选项时获得完整的类型推导支持&#xff0c;我们可以使用 defineProps 和 defineEmits API&#xff0c;它们将自动地在 <script setup> 中可用&#xff1a; defineProps 和 defineEmits …

移动开发(七):.NET MAUI使用RESTAPI实现查询天气笔记

目录 一、接口准备 二、实体部分 三、页面部分 四、后台代码逻辑 五、总结 在移动开发过程中,第三方对接是非常常见的。今天给大家分享.NET MAUI如何使用REST API实现输入城市名称查询天气的示例,希望对大家学习.NET MAUI可以提供一些帮助! 一、接口准备 首先我们需要…

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析

未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…

C++入门基础(三)

目录 引用引用概念例子1例子2例子3例子4常引用拓展 引用 引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。 比如&#xff1a;同学A有一个别名为张…

ChatGPT键盘快捷键(按ctrl + /呼出)

文章目录 ChatGPT键盘快捷键- 打开新聊天: Ctrl Shift O- 聚焦聊天输入: Shift Esc- 复制最后一个代码块: Ctrl Shift ;- 复制最后一个回复: Ctrl Shift C- 设置自定义指令: Ctrl Shift I- 切换边栏: Ctrl Shift S- 删除聊天: Ctrl Shift ⌫- 显示快捷方式: Ctrl …

VCS:三步法的仿真流程

相关阅读 VCShttps://blog.csdn.net/weixin_45791458/category_12828763.html 使用三步流程仿真设计涉及三个基本步骤&#xff1a; 分析(Analysis)展开(Elaboration)仿真(Simulation) VCS使用这三个步骤编译任何设计&#xff0c;无论所使用源代码的是HDL、HVL或其他支持的技术…

万字长文解读深度学习——Transformer

文章目录 &#x1f33a;深度学习面试八股汇总&#x1f33a;初识Transformer1. 编码器-解码器架构解码器的额外结构 2. 自注意力机制&#xff08;Self-Attention Mechanism&#xff09;解码器中的注意力机制的2点特殊 3. 位置编码&#xff08;Positional Encoding&#xff09;4.…

花指令例子

如图所示&#xff1a; 指令EB FF的汇编代码为jmp -1&#xff0c;CPU执行到地址处0x6c80c0的指令EB FF时(jmp -1)&#xff0c;EIP为6c80c2, 执行后&#xff0c;EIP为0x6c80c1。但是反汇编器无法自动识别该指令。

校园周边美食探索及分享平台

摘要&#xff1a; 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的美食业进而也面临着巨大的挑战&#xff0…

CSS高级技巧_精灵图_字体图标_CSS三角_vertical-align(图像和文字居中在同一行)_溢出文字省略号显示

目录 CSS高级技巧 1. 精灵图 1.1 为什么需要精灵图 1.2 精灵图&#xff08;sprites&#xff09;的使用 1.2 精灵图的使用 案例&#xff1a;拼出自己名字 2. 字体图标 2.1 字体图标的产生 2.2 字体图标的优点 2.3 字体图标的下载 2.4 字体图标的引入 2.4.1 字体文件格…