基于SHAP的二分类RF模型特征贡献与交互网络解析
二分类任务中,SHAP值的结构与多分类模型类似,但又略有不同。以随机森林(RF)为例,模型会为类别0和类别1分别输出一组SHAP值——但这里有一个关键点:在二分类任务里,两个类别互为对立面,因此它们的SHAP值恰好互为相反数,并且总和为零。换句话说,类别0和类别1的SHAP绝对值均值是完全一致的。相
基础代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
# 忽略所有警告
warnings.filterwarnings("ignore")
path = r"2026-6-8公众号Python机器学习AI.csv"
df = pd.read_csv(path)
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['target'], axis=1)
y = df['target']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
random_state=42,
stratify=df['target']
)
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
# 定义随机森林模型
rf_model = RandomForestClassifier(
random_state=42,
n_jobs=-1
)
# 定义随机森林超参数网格
hyperparameter_grid = {
'n_estimators': [100, 200, 300], # 树的数量
'max_depth': [None, 3, 6, 10], # 树的最大深度
'min_samples_split': [2, 5, 10], # 内部节点再划分所需的最小样本数
'min_samples_leaf': [1, 2, 4], # 叶子节点所需的最小样本数
'max_features': ['sqrt', 'log2', None], # 每次分裂考虑的最大特征数
'bootstrap': [True, False] # 是否使用 bootstrap 抽样
}
# 初始化网格搜索
grid_search = GridSearchCV(
estimator=rf_model,
param_grid=hyperparameter_grid,
cv=5, # 5折交叉验证
n_jobs=-1, # 使用所有可用CPU
verbose=2, # 输出详细搜索过程
scoring='accuracy' # 评价指标
)
# 在训练集上进行网格搜索
grid_search.fit(X_train, y_train)
# 使用最佳参数模型
best_rf_model = grid_search.best_estimator_
import shap
# 为测试集计算 SHAP 交互值
explainer = shap.TreeExplainer(best_rf_model)
shap_interaction_values = explainer.shap_interaction_values(X_test)
# 计算 SHAP 值
shap_values = explainer.shap_values(X_test)
print("SHAP values:", shap_values.shape)
print(shap_interaction_values.shape)
SHAP values: (90, 13, 2)
(90, 13, 13, 2)
先读取数据集,将target设为目标变量,其余留作特征。按7:3的比例划分训练集和测试集,并且利用stratify参数确保两集的类别比例保持一致。接着,构建随机森林分类器,配合GridSearchCV在多个超参数组合上进行5折交叉验证,最终以准确率为指标筛出最优模型。模型到手后,再用shap.TreeExplainer对测试集计算SHAP值和交互值,这样就能搞清楚每个特征独立的贡献,以及两两特征之间的交互影响。
从结果来看,shap_values的维度是(90, 13, 2)——代表90个测试样本、13个特征、2个类别。最后一个维度分别对应类别0和类别1的SHAP值。而shap_interaction_values的维度是(90, 13, 13, 2),意味着对每一个测试样本,模型都计算了13个特征之间两两交互的贡献矩阵,并且同样按两个类别分开。所以,RF模型二分类的SHAP输出形式和多分类模型很像,需要按研究目标进一步提取。既然我们的关注点放在类别1上,那就可以直接用shap_values[:, :, 1]和shap_interaction_values[:, :, :, 1]来提取类别1的特征贡献值和交互值,后续的网络图构建也就顺理成章了。
fig, ax = plot_feature_interaction_and_importance_optimized_cb(
interaction_df,
importance_df,
interaction_cmap=interaction_cmap_literature,
importance_cmap=importance_cmap_literature,
title="diseased",
background_style="curve_shadow",
shadow_all_pairs=True,
shadow_color="lightgray",
shadow_alpha=0.16,
shadow_base_width=1.4,
edge_curve_strength=0.42,
edge_curve_jitter=0.035,
edge_alpha=0.55,
cbar_borderpad=4,
cbar_title_y=1,
edge_width_range=(0.25, 6.0),
node_size_range=(70, 1400),
label_offset=0.16,
figsize=(8, 8),
sa ve_path="feature_network.png",
)



该文章案例

介绍
到这里,本节的内容就告一段落了。案例资料中包含了代码、注释、数据说明以及参考文献,方便大家学习和复现。你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:基于SHAP的二分类RF模型特征贡献与交互网络解析要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点GPTZero是一款检测大语言模型生成文本的工具,支持逐句高亮AI部分、AI词汇检测、抄袭比对、作者验证等功能,帮助教育界、出版界等构建AI内容防火墙,维护内容真实性,广泛应用于学术诚信与出版审核领域。
ProfoundAcademy是面向教师的动手计算机科学学习平台,自动化约80%重复性工作,提供即时反馈与AI辅导。内置超1000道练习题,支持课程定制、自动批改、进度监控、游戏化与作弊检测,高效辅助教学。
MT6761这颗核心板,可不是一颗普普通通的芯片那么简单。它把蓝牙、FM、WLAN、GPS全整合在一起,本质上就是一套高度集成的基带平台——既管通信协议,又跑应用处理,专门为LTE LTE-A和C2K智能手机设计。处理器用的是ARM Cortex-A53四核架构,主频最高2 0GHz,再加上一套强悍
先说明几个关键判断。如果你正被大量PDF、扫描件、图片文档困扰,希望把这些“静态”文件转化为可编辑、可检索的结构化数据,那么MinerU值得你花五分钟深入了解。作为开源社区近期涌现的专业工具,它专注于文档解析赛道,并且做得相当出色——支持37种语言,输出格式涵盖Markdown、JSON、HTML,
- 日榜
- 周榜
- 月榜
热点快看
