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

day32 python解释性库PDPbox

目录

一、初识PDPbox官方文档

二、准备鸢尾花数据集和训练模型

三、使用PDPbox进行解释性分析

1. 导入类并实例化对象

2. 调用plot方法绘制图形

3. 探索返回值的意义

四、总结与感悟


作为一名正在学习机器学习的学生,今天要学习一个非常有趣的库——PDPbox(Partial Dependence Plot Toolbox)。这个库能够帮助我们可视化特征对模型预测的影响,让我们更好地理解模型的决策过程。今天,我将通过一个经典的鸢尾花数据集三分类项目,分享我是如何从PDPbox的官方文档入手,一步步完成特征影响的可视化分析的。

一、初识PDPbox官方文档

在探索新的Python库时,我总是会先去查看它的官方文档。PDPbox的官方文档 PDPbox — PDPbox 0.2.1+1.g7fae76b.dirty documentation 给了我很大的帮助。虽然我还在努力提升英语水平,但通过安装一个免费的网页翻译插件,我能够比较顺畅地阅读文档内容。

我发现,大多数Python库的官方文档都会有一个“API Reference”或“Documentation”部分,这里详细列出了所有可用的函数、类和方法。PDPbox库虽然不大,但对于我这样的新手来说,正好合适用来学习如何使用官方文档来掌握一个库的用法。

二、准备鸢尾花数据集和训练模型

在开始使用PDPbox之前,我先准备了一个经典的机器学习项目——鸢尾花数据集的三分类问题。这个数据集包含4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。我使用了sklearn库来加载数据集,并用RandomForestClassifier训练了一个模型。以下是代码示例:

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier# 加载鸢尾花数据集
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target  # 添加目标列(0-2类:山鸢尾、杂色鸢尾、维吉尼亚鸢尾)# 特征与目标变量
features = iris.feature_names  # 4个特征
target = 'target'  # 目标列名# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=42
)# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

三、使用PDPbox进行解释性分析

模型训练完成后,我迫不及待地打开了PDPbox的官方文档,寻找可以用来可视化特征影响的类和方法。我发现了一个叫TargetPlot的类,它看起来很适合用来绘制目标变量在不同特征值下的分布情况。

1. 导入类并实例化对象

根据官方文档的说明,我首先导入了TargetPlot类,并尝试实例化对象。在这个过程中,我遇到了一个SettingWithCopyWarning的警告,提示我可能在对DataFrame的切片进行赋值操作时出现了问题。我查阅了Pandas的官方文档 Indexing and selecting data — pandas 2.2.3 documentation,了解到这可能是因为我在操作数据时没有正确使用.loc方法。以下是代码示例:

import pdpbox
print(pdpbox.__version__)  # 确保版本是最新的from pdpbox.info_plots import TargetPlot  # 导入TargetPlot类# 选择待分析的特征
feature = 'petal length (cm)'
feature_name = feature  # 特征显示名称# 初始化TargetPlot对象
target_plot = TargetPlot(df=df,  # 原始数据(需包含特征和目标列)feature=feature,  # 目标特征列feature_name=feature_name,  # 特征名称(用于绘图标签)target='target',  # 多分类目标索引(鸢尾花3个类别)grid_type='percentile',  # 分桶方式:百分位num_grid_points=10  # 划分为10个桶
)

2. 调用plot方法绘制图形

实例化对象后,我调用了plot方法来绘制目标变量的分布图。我发现这个方法返回了一个三元组(fig, axes, summary_df),其中fig是Plotly的Figure对象,axes是绘图的坐标轴对象(在这个例子中返回的是None),而summary_df是一个DataFrame,包含了目标变量在不同特征区间的统计摘要。以下是代码示例:

fig, axes, summary_df = target_plot.plot(which_classes=None,  # 绘制所有类别(0,1,2)show_percentile=True,  # 显示百分位线engine='plotly',template='plotly_white'
)# 手动设置图表尺寸(单位:像素)
fig.update_layout(width=800,  # 宽度800像素height=500,  # 高度500像素title=dict(text=f'Target Plot: {feature_name}', x=0.5)  # 居中标题
)fig.show()

3. 探索返回值的意义

在绘制完图形后,我开始好奇plot方法返回的三元组(fig, axes, summary_df)究竟是什么。通过查阅官方文档,我了解到fig是可以用来进一步修改图表外观的Plotly Figure对象,summary_df则是包含了目标变量在不同特征区间的统计摘要数据。这些信息让我对特征如何影响目标变量有了更直观的理解。

四、总结与感悟

通过今天的实践,我不仅学会了如何使用PDPbox的TargetPlot类来可视化特征对目标变量的影响,还掌握了如何通过官方文档来探索和使用新的Python库。

@浙大疏锦行

http://www.xdnf.cn/news/7879.html

相关文章:

  • java 代码查重(三)常见的距离算法和相似度(相关系数)计算方法
  • 养生指南:五维升级健康生活
  • 23种经典设计模式(GoF设计模式)
  • 【苍穹外卖】Day01—Mac前端环境搭建
  • leetcode hot100刷题日记——7.最大子数组和
  • systick滴答定时器us延时和毫秒延时
  • 自动获取新版本 js 静态文件
  • 计算机网络-MPLS VPN报文转发
  • Redis面试题全面解析:从基础到底层实现
  • Python Seaborn 高级可视化指南
  • Datawhale 5月llm-universe 第4次笔记
  • 游戏引擎学习第302天:使用精灵边界进行排序
  • 化工行业质检LIMS 系统应用 原材料与成品质量追溯智能化方案
  • Hass-Panel - 开源智能家居控制面板
  • LeetCode222_完全二叉树的结点个数
  • vscode离线安装组件工具vsix
  • 《微服务架构设计模式》笔记
  • PyTorch中cdist和sum函数使用详解
  • 【图像大模型】深度解析RIFE: 基于中间流估计的实时视频插帧算法
  • 解决C#泛型类参数无法带参数实例化的问题
  • Speexx: Online Language Training Business Coaching Platform
  • 使用Tkinter写一个发送kafka消息的工具
  • DVWA-XSS
  • 网络流量分析工具ntopng的安装与基本使用
  • Java接口P99含义解析
  • 【713. 乘积小于 K 的子数组】
  • 目标检测 RT-DETR(2023)详细解读
  • Python 包管理工具uv常用场景使用指南
  • 在线视频下载利器,支持100多平台下载
  • [Java实战]Spring Boot整合Prometheus:应用性能监控与可视化(三十二)