商城首页欢迎来到中国正版软件门户

您的位置:首页 >标准化数据训练模型后,如何还原PDP横坐标原始尺度

标准化数据训练模型后,如何还原PDP横坐标原始尺度

  发布于2026-04-16 阅读(0)

扫一扫,手机访问

如何在使用标准化数据训练模型后,为部分依赖图(PDP)正确还原原始尺度的横坐标

当随机森林等模型基于StandardScaler标准化的数据训练时,PartialDependenceDisplay默认显示缩放后的特征值;本文介绍如何通过逆变换将PDP横坐标标签重映射为原始数据尺度,提升可解释性,无需重新训练模型。

当随机森林等模型基于StandardScaler标准化的数据训练时,PartialDependenceDisplay默认显示缩放后的特征值;本文介绍如何通过逆变换将PDP横坐标标签重映射为原始数据尺度,提升可解释性,无需重新训练模型。

在使用StandardScaler对特征进行标准化(即零均值、单位方差)后训练模型,调用PartialDependenceDisplay.from_estimator()生成的部分依赖图(PDP)中,横轴刻度反映的是标准化后的数值(如 −2.5 ~ 2.0),这严重削弱了业务可解释性——我们更关心“年龄每增加5岁”或“收入每提高1万元”对预测概率的影响,而非“标准差变化0.3个单位”。

关键在于:无需对原始测试集X_test_final反向缩放后再传入PDP函数(这会导致内部网格采样逻辑失效),而应保留标准化输入以确保计算正确性,仅对最终绘图的横轴刻度标签(tick labels)做逆变换。

StandardScaler的标准化公式为:
[ X' = \frac{X - \mu}{\sigma} ]
因此逆变换为:
[ X = X' \cdot \sigma + \mu ]

以下是完整实现步骤(以单特征PDP为例):

from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import PartialDependenceDisplay
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import numpy as np

# 假设已训练好模型 best_clf,X_test_final 是标准化后的测试集,
# scaler 是拟合在训练集上的 StandardScaler 实例
# best_features = ['age']  # 示例目标特征

# 1. 生成 PDP 并获取 Axes 对象
fig, ax = plt.subplots(figsize=(6, 4))
display = PartialDependenceDisplay.from_estimator(
    best_clf, 
    X_test_final, 
    features=best_features,
    ax=ax,
    line_kw={'color': 'steelblue', 'linewidth': 2}
)

# 2. 获取该特征对应的原始训练数据(用于计算均值/标准差)
# ⚠️ 注意:必须使用 scaler.fit() 时的原始训练特征列,而非测试集
# 假设 X_train_orig 是原始未缩放的训练特征矩阵,且 age 列索引为 0
x_orig = X_train_orig[:, 0]  # 替换为实际列索引或列名切片
mu, sigma = x_orig.mean(), x_orig.std()

# 3. 反向变换横轴刻度标签
x_ticks = ax.get_xticks()
xt_unscaled = (x_ticks * sigma) + mu
# 格式化为易读字符串(根据数据类型调整小数位数)
xt_labels = [f'{val:.1f}' if sigma > 0.1 else f'{val:.0f}' for val in xt_unscaled]

ax.set_xticks(x_ticks)  # 保持原刻度位置
ax.set_xticklabels(xt_labels)
ax.set_xlabel(f'{best_features[0]} (original scale)')

plt.tight_layout()
plt.show()

? 重要注意事项

  • 均值与标准差必须来自原始训练数据(即scaler.fit(X_train)所用数据),而非测试集或缩放后数据,否则逆变换失准;
  • 若使用ColumnTransformer或管道(Pipeline),需从scaler对象中显式提取scaler.mean_[i]和scaler.scale_[i](scale_即标准差);
  • 多特征PDP需对每个子图分别处理ax,并匹配对应特征的统计量;
  • 此方法仅修改视觉标签,不改变PDP内在计算逻辑——模型始终在标准化空间中评估,保障结果数学一致性。

通过该技巧,你可在不牺牲模型性能与计算严谨性的前提下,让PDP真正“说人话”,显著增强模型诊断与业务沟通效率。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注