可解释 AI 工具怎么用?用部分依赖图检查特征与预测的关系

训练本地演示回归模型,生成和保存部分依赖图,核对网格及预测范围,并说明参考分布、相关特征与因果解释的限制。

可解释 AI 工具能帮助查看模型怎样利用输入,但图形本身不证明因果。部分依赖图(PDP)把某个特征依次替换为一组值,对其它样本的预测取平均,让你检查模型在不同输入值附近的平均响应。本例用 scikit-learn 为已经训练好的数值回归模型生成一张可保存的曲线。

以下代码在 Windows、Python 3.11、scikit-learn 1.7.2、NumPy 2.4.6 的本地环境运行核对。数据是教学用人工构造样例,不是业务测评;示例数字只用于检查代码路径。

可解释 AI 工具怎么用?用部分依赖图检查特征与预测的关系

先准备环境

在自己可写的目录打开终端。首次运行先创建虚拟环境;Windows 用下面的命令,macOS/Linux 把激活命令换成 source .venv/bin/activate。安装只需要在该环境里进行一次。

python -m venv .venv
.venv\Scripts\activate
python -m pip install scikit-learn==1.7.2 numpy==2.4.6

本例另需 Matplotlib 3.10.7,运行 python -m pip install matplotlib==3.10.7。使用 CPU,不需要 API Key 或 GPU。模型和数据都是本地教学示例,未在真实生产数据上测量解释效果。

生成一张 PDP,并检查原始曲线

保存代码为 inspect_pdp.py,在可写目录运行 python inspect_pdp.py。脚本会训练一个小型随机森林,使用验证集作为平均参考,并保存 pdp.png;打开该 PNG 查看横轴位置和曲线。

PartialDependenceDisplay 文档给出了 from_estimator、features 与 grid_resolution 参数。这里明确指定 brute,逐点计算预测,避免混淆不同计算方法。

from pathlib import Path
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import PartialDependenceDisplay
from sklearn.model_selection import train_test_split

rng = np.random.default_rng(42)
X = rng.uniform(-2, 2, size=(400, 2))
y = X[:, 0] ** 2 + 3 * X[:, 1] + rng.normal(0, 0.15, 400)
X_train, X_valid, y_train, y_valid = train_test_split(X, y, random_state=42)
model = RandomForestRegressor(n_estimators=100, max_depth=5, random_state=42)
model.fit(X_train, y_train)
display = PartialDependenceDisplay.from_estimator(
    model, X_valid, features=[0], feature_names=['feature_0', 'feature_1'],
    grid_resolution=20, method='brute', kind='average')
line = display.lines_[0, 0]
grid, average = line.get_xdata(), line.get_ydata()
print('grid count:', len(grid))
print('x range:', round(float(grid.min()), 3), round(float(grid.max()), 3))
print('average prediction range:', round(float(average.min()), 3), round(float(average.max()), 3))
path = Path('pdp.png')
plt.savefig(path, dpi=150, bbox_inches='tight')
plt.close('all')
print('PNG exists:', path.is_file(), 'bytes:', path.stat().st_size)
assert len(grid) == 20 and np.isfinite(average).all() and path.stat().st_size > 1000

本地样例输出与读图方法

本地运行得到 20 个横轴位置,范围约 -1.820 至 1.784,平均预测约在 0.650 至 2.912 之间;PNG 已生成且大小为 32230 字节。具体字节数不是图形质量指标;核验应包括文件可打开、20 个位置都有有限的纵轴值,并核对横轴就是 feature_0。

演示数据的目标含 feature_0 的平方项,因此图形可以帮助观察两端与中间的响应差别。纵轴是模型的平均预测,横轴是设定的特征值;图上的一条线不是某个客户的个人预测路径,也不是“将该特征增加一单位,就会造成某个结果”的因果结论。

接到自己的模型前,先核对四件事

  1. 使用已经拟合的回归模型和正确的参考样本;不要把真实目标列一起放进 X。
  2. 按实际输入列顺序选 features。若模型包含预处理,优先把完整 Pipeline 交给函数,保持参考输入与训练契约一致。
  3. 给 feature_names 写准确单位,例如温度是摄氏度还是开尔文。若输入已经标准化,横轴也在相应尺度上,不能直接标成原始业务单位。
  4. 检查数据中两特征是否高度相关。将一列人为替换而保留另一列,可能产生现实中不会出现的组合。

PDP 与 ICE 官方指南说明特征相关性与平均效应的限制。如果平均曲线掩盖不同群体的变化,可以查看 ICE 个体曲线,再核对群体的输入分布;不能因为一条平均线平坦,就断言这个特征完全没有作用。

没有图或者图形异常怎样处理

未拟合错误时检查 model.fit 是否完成;特征下标越界时核对 X.shape 与列顺序;保存文件失败时换到可写目录。若计算很慢,先减少参考样本或网格点作运行检查,并在报告中写清抽样方式。网格是有限参考范围,不应用曲线外推极端输入的响应。

读完后的下一步是选一个有明确单位、模型确实使用的数值特征,保存其 PDP,同时附上参考样本范围和相关性检查结果。工具提供模型行为线索,专业或高风险决定仍需对应领域的验证。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30833.html

赞 (0)
AI小管家的头像AI小管家
用 ChatGPT 设计图像数据增强:验证翻转后的图片和检测框
上一篇 1天前
OCR 前怎么矫正倾斜照片?用 OpenCV 四点透视变换检查结果
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部