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

您的位置: 首页 > 文章列表 > 编程开发 > 如何在使用标准化数据训练模型后,为部分依赖图(PDP)恢复原始特征尺度

如何在使用标准化数据训练模型后,为部分依赖图(PDP)恢复原始特征尺度

  发布于2026-07-18 阅读(0)

扫一扫,手机访问

模型用标准化数据训练好了,画部分依赖图(PDP)时,x轴却显示一堆缩放后的数值?别急,有办法让它们回归原始业务单位。本文介绍如何通过反向变换刻度标签,使PDP横轴恢复原始尺度,兼顾可解释性与技术正确性。

在机器学习实践中,用 StandardScaler 把特征做标准化(零均值、单位方差)是提升模型收敛性与稳定性的常规操作。可问题来了:当你调用 sklearn.inspection.PartialDependenceDisplay.from_estimator() 绘制部分依赖图时,如果传入的是已经缩放过的测试集 X_test_final,图表横轴直接显示标准化后的数值(比如 -2.1、0.0、1.8),业务人员看了直接懵圈——你没法直观判断“收入增加 5000 元”对违约概率的影响,这才是真痛点。

好消息是:你完全不用重新训练模型,也不用修改输入数据,只需要重新映射坐标轴的刻度标签(tick labels)。因为 PDP 内部计算仍然基于缩放空间(模型只认识那个空间),我们做的仅仅是给显示的刻度值“翻译”回原始尺度。

假设你已经保存了训练时 StandardScaler 的参数(强烈建议每次都这么做):

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

# ✅ 正确做法:保存 scaler 参数
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

best_clf = RandomForestClassifier().fit(X_train_scaled, y_train)

# 绘制 PDP(仍使用缩放数据)
fig, ax = plt.subplots(figsize=(8, 6))
disp = PartialDependenceDisplay.from_estimator(
    best_clf, X_test_scaled, features=best_features, ax=ax
)

# ⬅️ 反向映射 x 轴刻度标签(以第一个特征为例)
feature_idx = 0
x_mean = scaler.mean_[feature_idx]
x_std = scaler.scale_[feature_idx]  # 注意:StandardScaler 使用 scale_(不是 std_)

# 获取当前 x 轴刻度位置(标准化空间中的值)
x_ticks = ax.get_xticks()
# 将其映射回原始尺度:x_original = x_scaled * std + mean
x_original = x_ticks * x_std + x_mean

# 格式化为易读字符串(按原始数据量级调整小数位)
x_labels = [f'{val:.2f}' if abs(val) < 100 else f'{val:.0f}' for val in x_original]
ax.set_xticks(x_ticks)           # 保持原有刻度位置
ax.set_xticklabels(x_labels)     # 仅替换标签文本

plt.title(f'Partial Dependence of {feature_names[best_features[feature_idx]]} (original scale)')
plt.tight_layout()
plt.show()

⚠️ 实际操作中需要注意这么几点:

  • 千万别把 X_test_scaled 手动反标准化后再传给 from_estimator:那样 PDP 计算就在错误空间里进行,结果完全失真;
  • StandardScaler 的标准差存在 .scale_ 属性里(不是 .std_),均值在 .mean_ 中;
  • 如果画多特征 PDP(比如 features=[(0, 1)]),需要对每个子图的对应轴分别执行上述操作;
  • 对于类别型特征或者用了其他变换(如 RobustScaler、MinMaxScaler)的情形,反向公式要相应调整——比如 MinMaxScaler 就是 x_orig = x_scaled * (max - min) + min

说到底,PDP 的可解释性不在于数据是否缩放,而在于你怎么展示坐标轴。只要保存好训练时的 scaler 参数,然后只改一下 tick labels,就能零成本实现“模型内部用缩放数据、图表对外展示原始尺度”的最佳实践。

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

热门关注