You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多分类任务中为每个特征绘制多类别PartialDependencePlot线的技术求助

多分类任务中基于partial_dependence结果绘制多类别Partial Dependence Plot

核心思路

sklearn.inspection.partial_dependence返回的结果包含了每个特征在不同取值下,每个类别的部分依赖值。我们可以直接用matplotlib手动遍历这些数据,为每个特征单独绘制一张图,图内包含所有类别的PDP折线。

具体实现代码

假设你已经完成了模型训练,并通过以下代码获取了部分依赖结果:

from sklearn.inspection import partial_dependence

# 假设model是训练好的多分类模型,X是特征数据集,features是要分析的特征索引/名称列表
results = partial_dependence(
    model,
    X=X,
    features=features,  # 示例:[0,1,2] 或 ["age", "income"]
    target=range(10)  # 指定10个目标类别
)

接下来用matplotlib绘图:

import matplotlib.pyplot as plt

# 根据特征数量设置子图布局
n_features = len(features)
fig, axes = plt.subplots(n_features, 1, figsize=(10, 5*n_features))
# 处理单特征的特殊情况,统一为列表格式
if n_features == 1:
    axes = [axes]

# 遍历每个特征和对应的子图
for idx, (ax, feature_name) in enumerate(zip(axes, features)):
    # 获取当前特征的x轴网格点取值
    x_vals = results["values"][idx]
    # 获取当前特征下所有类别的部分依赖值(形状:(10, 网格点数量))
    pdp_vals = results["average"][idx]
    
    # 为每个类别绘制折线
    for class_idx in range(10):
        ax.plot(x_vals, pdp_vals[class_idx], label=f"类别 {class_idx}")
    
    # 美化子图
    ax.set_title(f"特征 {feature_name} 的部分依赖图")
    ax.set_xlabel(feature_name)
    ax.set_ylabel("部分依赖值")
    ax.legend(bbox_to_anchor=(1.05, 1), loc="upper left")  # 图例放图外避免遮挡
    ax.grid(alpha=0.3)

plt.tight_layout()
plt.show()

关键细节说明

  • results["values"]:列表类型,每个元素对应一个特征的x轴网格点取值,形状为(网格点数量,)
  • results["average"]:列表类型,每个元素对应一个特征的部分依赖值,形状为(类别数, 网格点数量),第一个维度是类别索引,第二个维度是对应网格点的依赖值
  • 如果需要将所有特征的PDP放在同一张图(不推荐,易拥挤),可去掉子图循环,直接在同一个Axes上绘制所有折线,标签改为f"特征{feature_name} - 类别{class_idx}"即可

内容的提问来源于stack exchange,提问作者amestrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:52:40