Day 15 训练

news2025/5/10 14:40:46

Day 15

    • 对鸢尾花数据集进行处理,特征可视化,贝叶斯优化随机森林,Shap解释
      • 1. 导入必要的库
      • 2. 设置中文字体
      • 3. 加载数据集
      • 4. 查看数据
      • 5. 数据准备
      • 6. 贝叶斯优化随机森林
      • 7. 评估结果
      • 8. 绘制箱形图
      • 9. 绘制特征相关性热力图
      • 10. SHAP模型解释
      • 总结


对鸢尾花数据集进行处理,特征可视化,贝叶斯优化随机森林,Shap解释

完整代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.metrics import classification_report,confusion_matrix
from sklearn.model_selection import train_test_split
import seaborn as sns   #基于matplotlib的高级绘图库,能绘制更美观的统计图形。
import warnings
warnings.filterwarnings("ignore")
 
 # 设置中文字体(解决中文显示问题)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统常用黑体字体
plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号

iris = datasets.load_iris()  # 加载鸢尾花数据集
# 将iris数据集转换为DataFrame
data = pd.DataFrame(data=np.c_[iris['data'], iris['target']],
                      columns=iris['feature_names'] + ['target'])

# 查看前5行数据
print(data.head())

# 数据准备
X = data.drop('target', axis=1)
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 贝叶斯优化随机森林
from skopt import BayesSearchCV
from skopt.space import Integer
from sklearn.ensemble import RandomForestClassifier

# 定义搜索空间
search_space = {
    'n_estimators': Integer(50, 200),
    'max_depth': Integer(5, 30),
    'min_samples_split': Integer(2, 10),
    'min_samples_leaf': Integer(1, 4)
}

# 初始化贝叶斯优化
bayes_search = BayesSearchCV(
    estimator=RandomForestClassifier(random_state=42),
    search_spaces=search_space,
    n_iter=50,
    cv=5,
    scoring='accuracy',
    n_jobs=-1
)

# 执行优化
bayes_search.fit(X_train, y_train)

# 评估结果
best_model = bayes_search.best_estimator_
y_pred = best_model.predict(X_test)

print("\n最佳参数:", bayes_search.best_params_)
print("\n分类报告:")
print(classification_report(y_test, y_pred))
print("混淆矩阵:")
print(confusion_matrix(y_test, y_pred))


# 绘制前六个特征的箱形图
plt.figure(figsize=(15, 10))
features = data.columns[:6]  # 获取前六个特征名

for i, feature in enumerate(features):
    plt.subplot(2, 3, i+1)  # 2行3列布局
    sns.boxplot(data=data, y=feature)
    plt.title(f'{feature} 箱形图')
    
plt.tight_layout()  # 自动调整子图间距
plt.show()

# 绘制特征相关性热力图
plt.figure(figsize=(10, 8))
corr = data.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', center=0)
plt.title('特征相关性热力图')
plt.tight_layout()
plt.show()

# SHAP模型解释
import shap

# 初始化解释器
explainer = shap.TreeExplainer(best_model)

# 计算SHAP值
shap_values = explainer.shap_values(X_test)

# 特征重要条形图
plt.figure(figsize=(10, 6))
shap.summary_plot(shap_values, X_test, plot_type="bar", show=False)
plt.title("特征重要性条形图")
plt.tight_layout()
plt.show()

# 蜂巢图
plt.figure(figsize=(10, 6))
shap.summary_plot(shap_values, X_test, show=False)
plt.title("特征影响蜂巢图")
plt.tight_layout()
plt.show()

这段代码是一个完整的机器学习流程,包括数据加载、预处理、模型训练(使用贝叶斯优化的随机森林)、模型评估、结果可视化(箱形图、热力图、SHAP解释)等步骤。以下是对代码的详细解释:

1. 导入必要的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.model_selection import train_test_split
import seaborn as sns  # 基于matplotlib的高级绘图库
import warnings
warnings.filterwarnings("ignore")
  • numpy:用于数学运算。
  • pandas:用于数据处理和分析。
  • matplotlib.pyplot:用于绘图。
  • sklearn.datasets:用于加载数据集。
  • sklearn.metrics:用于评估模型性能。
  • sklearn.model_selection:用于数据分割。
  • seaborn:用于绘制更美观的统计图形。
  • warnings:用于忽略警告信息。

2. 设置中文字体

plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统常用黑体字体
plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号
  • 设置Matplotlib的字体为黑体,以确保中文可以正常显示。
  • 确保负号可以正常显示。

3. 加载数据集

iris = datasets.load_iris()  # 加载鸢尾花数据集
data = pd.DataFrame(data=np.c_[iris['data'], iris['target']],
                    columns=iris['feature_names'] + ['target'])
  • 使用sklearn.datasets加载鸢尾花数据集。
  • 将数据集转换为pandas.DataFrame,方便后续操作。

4. 查看数据

print(data.head())
  • 打印数据集的前5行,查看数据结构。

5. 数据准备

X = data.drop('target', axis=1)
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • 将特征和目标变量分开。
  • 使用train_test_split将数据集分为训练集和测试集,测试集占20%。

6. 贝叶斯优化随机森林

from skopt import BayesSearchCV
from skopt.space import Integer
from sklearn.ensemble import RandomForestClassifier

search_space = {
    'n_estimators': Integer(50, 200),
    'max_depth': Integer(5, 30),
    'min_samples_split': Integer(2, 10),
    'min_samples_leaf': Integer(1, 4)
}

bayes_search = BayesSearchCV(
    estimator=RandomForestClassifier(random_state=42),
    search_spaces=search_space,
    n_iter=50,
    cv=5,
    scoring='accuracy',
    n_jobs=-1
)

bayes_search.fit(X_train, y_train)
  • 使用BayesSearchCV进行贝叶斯优化,优化随机森林的超参数。
  • 定义搜索空间,包括n_estimators(树的数量)、max_depth(树的最大深度)、min_samples_split(分裂内部节点所需的最小样本数)、min_samples_leaf(叶节点最小样本数)。
  • 设置优化的迭代次数为50,交叉验证为5折,评分标准为准确率,使用所有可用的CPU核心。

7. 评估结果

best_model = bayes_search.best_estimator_
y_pred = best_model.predict(X_test)

print("\n最佳参数:", bayes_search.best_params_)
print("\n分类报告:")
print(classification_report(y_test, y_pred))
print("混淆矩阵:")
print(confusion_matrix(y_test, y_pred))
  • 使用最佳模型对测试集进行预测。
  • 打印最佳参数、分类报告和混淆矩阵,评估模型性能。

8. 绘制箱形图

plt.figure(figsize=(15, 10))
features = data.columns[:6]  # 获取前六个特征名

for i, feature in enumerate(features):
    plt.subplot(2, 3, i+1)  # 2行3列布局
    sns.boxplot(data=data, y=feature)
    plt.title(f'{feature} 箱形图')
    
plt.tight_layout()
plt.show()
  • 绘制前六个特征的箱形图,查看数据的分布情况。

9. 绘制特征相关性热力图

plt.figure(figsize=(10, 8))
corr = data.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', center=0)
plt.title('特征相关性热力图')
plt.tight_layout()
plt.show()
  • 计算特征之间的相关性,并绘制热力图,查看特征之间的相关性。

10. SHAP模型解释

import shap

explainer = shap.TreeExplainer(best_model)
shap_values = explainer.shap_values(X_test)

plt.figure(figsize=(10, 6))
shap.summary_plot(shap_values, X_test, plot_type="bar", show=False)
plt.title("特征重要性条形图")
plt.tight_layout()
plt.show()

plt.figure(figsize=(10, 6))
shap.summary_plot(shap_values, X_test, show=False)
plt.title("特征影响蜂巢图")
plt.tight_layout()
plt.show()
  • 使用SHAP(SHapley Additive exPlanations)对模型进行解释。
  • 计算SHAP值,绘制特征重要性条形图和特征影响蜂巢图,直观展示特征对模型预测的影响。

总结

这段代码完整地展示了从数据加载、预处理、模型训练、优化、评估到结果可视化的流程。通过贝叶斯优化提升了随机森林的性能,并通过SHAP解释了模型的预测结果,使整个机器学习过程更加透明和可解释。
@浙大疏锦行

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

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

相关文章

物理服务器紧急救援:CentOS系统密码重置全流程实战指南

前言 在企业IT运维实践中,物理服务器密码丢失是典型的"低概率高风险"事件。某金融科技公司曾因核心服务器密码遗失导致业务中断36小时,直接损失超过800万元。这起真实案例揭示了系统密码管理的关键性——当承载重要业务的物理服务器遭遇密码丢…

Linux系统下使用Kafka和Zookeeper

Apache Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,后来成为 Apache 软件基金会的顶级项目。它具有高吞吐量、可扩展性、持久性、容错性等特点,主要用于处理实时数据流。 Linux系统下使用Kafka 1.安装 Java Kafka 和 Zookeeper 都是基于 Java 开发的,所以需要先…

Unity按钮事件冒泡

今天unity写程序时,我做了一个透明按钮,没图片,只绑了点击事件,把子对象文字组件也删了,空留一个透明按钮,此时运行时点击按钮是没有反应的,网上的教程说必须指定target graphic(目标…

指令图像编辑模型:ICEdit-MoE-LoRA

ICEdit-MoE-LoRA 一、研究背景与目标 In-Context Edit 是一种新颖的基于指令的图像编辑方法,旨在实现与现有最佳方法相当甚至更优的编辑效果。传统图像编辑技术在处理复杂指令时存在一定局限性,尤其是在多轮编辑任务中,结果的准确性和连贯性…

捌拾叁- 量子傅里叶变换

1. 前言 最近公司地震,现在稍微有点时间继续学习。 看了几个算法,都说是基于 量子傅里叶变换 ,好,就是他了 Quantum Fourier。 2. 傅里叶变换 大学是学通信的,对于傅里叶变换还是有所理解的。其实就是基于一个 时域…

2.在Openharmony写hello world

原文链接:https://kashima19960.github.io/2025/03/21/openharmony/2.在Openharmony写hello%20world/ 前言 Openharmony 的第一个官方例程的是教你在Hi3861上编写hello world程序,这个例程相当简单编写 Hello World”程序,而且步骤也很省略&…

STM32外设-串口UART

STM32外设-串口UART 一,串口简介二,串口基础概念1,什么是同步和异步/UART与USART对比2,串行与并行3,波特率 (Baud Rate)4,数据帧 (Data Frame)5,TX 和 RX 三,硬件连接1,u…

MCU存储系统架构解析

今天和大家分享一下MCU存储器层次结构的设计思路。这种分层存储架构通过整合不同特性的存储单元,能够很好地平衡性能与成本需求。 首先是寄存器层,它直接集成在CPU内核里,速度最快(纳秒级),但容量比较小&a…

Linux——MySQL基础

基础知识 连接服务器 mysql -h 127.0.0.1 -P 3306 -u root -p -h 指明登录部署了myqsl服务的主机 -P 指明访问的端口号 -u 指明用户 -p 指明登录密码(可以不填写) 什么是数据库 首先,数据库是分为服务端和客户端的: mysql是客户…

OpenGl实战笔记(2)基于qt5.15.2+mingw64+opengl实现纹理贴图

一、作用原理 1、作用:将一张图片(纹理)映射到几何体表面,提升视觉真实感,不增加几何复杂度。 2、原理:加载图片为纹理 → 上传到 GPU;为顶点设置纹理坐标(如 0~1 范围)&…

【计算机视觉】OpenCV实战项目: opencv-text-deskew:实时文本图像校正

opencv-text-deskew:基于OpenCV的实时文本图像校正 一、项目概述与技术背景1.1 核心功能与创新点1.2 技术指标对比1.3 技术演进路线 二、环境配置与算法原理2.1 硬件要求2.2 软件部署2.3 核心算法流程 三、核心算法解析3.1 文本区域定位3.2 角度检测优化3.3 仿射变换…

Java 23种设计模式 - 结构型模式7种

Java 23种设计模式 - 结构型模式7种 1 适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 优点 将目标类和适配者类解耦增加了类的透明性和复用性,将具体的实现封…

数据库(MySQL)基础

一、登录数据库 在linux系统中登录数据库的指令 mysql -h 127.48.0.236 -P 3306 -u root -p -h:填写IP地址,指明要连接的主机。如果不加该字段表示本地主机-P:填写端口号,指明进程。 如果不加该字段会使用默认的端口号。-u&…

Vue 2.0 详解全教程(含 Axios 封装 + 路由守卫 + 实战进阶)

目录 一、Vue 2.0 简介1.1 什么是 Vue?1.2 Vue 2.x 的主要特性 二、快速上手2.1 引入 Vue2.2 创建第一个 Vue 实例 三、核心概念详解3.1 模板语法3.2 数据绑定3.3 事件绑定3.4 计算属性 & 侦听器 四、组件系统4.1 定义全局组件4.2 单文件组件(*.vue …

依赖关系-根据依赖关系求候选码

关系模式R(U, F), U{},F是R的函数依赖集,可以将属性分为4类: L: 仅出现在依赖集F左侧的属性 R: 仅出现在依赖集F右侧的属性 LR: 在依赖集F左右侧都出现的属性 NLR: 在依赖集F左右侧都未出现的属性 结论1: 若X是L类…

uniapp-商城-47-后台 分类数据的生成(通过数据)

在第46章节中,我们为后台数据创建了分类的数据表结构schema,使得可以通过后台添加数据并保存,同时使用云函数进行数据库数据的读取。文章详细介绍了如何通过前端代码实现分类管理功能,包括获取数据、添加、更新和删除分类。主要代…

java-----------------多态

多态,当前指的是 java 所呈现出来的一个对象 多态 定义 多态是指同一个行为具有多个不同表现形式或形态的能力。在面向对象编程中,多态通过方法重载和方法重写来实现。 强弱类型语言 javascript 或者python 是弱类型语言 C 语言,或者 C…

【文档智能】开源的阅读顺序(Layoutreader)模型使用指南

一年前,笔者基于开源了一个阅读顺序模型(《【文档智能】符合人类阅读顺序的文档模型-LayoutReader及非官方权重开源》), PDF解析并结构化技术路线方案及思路,文档智能专栏 阅读顺序检测旨在捕获人类读者能够自然理解的…

Edu教育邮箱申请2025年5月

各位好,这里是aigc创意人竹相左边 如你所见,这里是第3部分 现在是选择大学的学科专业 选专业的时候记得考虑一下当前的时间日期。 比如现在是夏天,所以你选秋天入学是合理的。

STM32-TIM定时中断(6)

目录 一、TIM介绍 1、TIM简介 2、定时器类型 3、基本定时器 4、通用定时器 5、定时中断基本结构 6、时基单元的时序 (1)预分频器时序 (2)计数器时序 7、RCC时钟树 二、定时器输出比较功能(PWM) …