局部依赖图 (PDP) 和个体条件期望 (ICE) 图可用于可视化和剖析训练指标与一组输出特色之间的交互关系。
局部依赖图(Partial Dependence Plot)
局部依赖图显示了指标函数(即咱们的机器学习模型)和一组特色之间的依赖关系,并边缘化其余特色的值(也就是补充特色)。它们是通过将模型利用于一组数据、扭转感兴趣特色的值同时放弃补充特色的值不变能够分析模型输入来计算特色变量对模型预测后果影响的函数关系:例如近似线性关系、枯燥关系或者更简单的关系。
个体条件期望图(Individual Conditional Expectation)
尽管 PDP 善于显示指标特色的均匀成果,但它可能会含糊仅在某些样本上显示特色的关系影响。
所以个体的条件期望 (ICE) 图显示了指标函数和特色之间的依赖关系。与显示一组特色的均匀成果的局部依赖图不同,ICE 图打消了非平均效应的影响并别离可视化每个样本的预测对特色的依赖关系,每个样本一行。
代码示例
注:sklearn 0.24 当前的版本也退出对这两个图进行绘制的性能,然而这里咱们应用更好的 shap 库
from sklearn.datasets import fetch_california_housing
from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import PartialDependenceDisplay
import matplotlib.pyplot as plt
在本文中,咱们应用加州住房的数据集,其目标是应用支出中位数或每户房间数量等特色来预测街区的均匀房价。首先训练一个 RandomForestRegressor 来依据这些特色预测房价,最初应用 sklearn.inspection 模块中的 PartialDependenceDisplay 类制作局部依赖图和个体条件期望图。
咱们次要解决以下这些个性:
- AveOccup:均匀家庭成员数。
- MedInc:支出中位数。
加载加州住房数据集
X, y = fetch_california_housing (return_X_y = True, as_frame = True)
指标变量是加州地区的屋宇价值中位数,以数十万美元($100,000)示意。该数据集来自 1990 年的美国 人口普查公布样本数据(街区是最小的天文单位,通常是一个街区人口为 600 至 3,000 人)。
- MedInc 支出中位数
- HouseAge 屋宇年龄中位数
- AveRooms 每户均匀房间数
- AveBedrms 每户均匀卧室数量
- Population 人口数
- AveOccup 均匀家庭成员数
- Latitude 纬度
- Longitude 经度
以下是数据集中的一些样本特征值。指标特色,即 每个街区的平均价格,在 0 到 5 之间浮动,数值以十万美元示意。
让咱们先训练一个 RandomForestRegressor 来学习从屋宇特色中预测价格。
model = RandomForestRegressor(random_state=42).fit(X, y)
而后应用 Shap 库来进行绘图,Shap 库中蕴含几种可解释的 AI 相干办法。
pip install shap
导入 Shap 库并创立一小部分训练数据,在本例中为 100 个样本
import shap
X100 = X.sample(n=100)
接下来,应用 shap.plots 模块的 partial_dependence 函数制作局部依赖图,并作为参数传递:
- 指标特色(AveOccup)。
- 预测函数 (model.predict)。
- 数据集 (X100)。
- 是否制作局部依赖图或个体条件期望图。
- 是否还绘制均匀模型预测 (model_expected_value) 和均匀特征值 (feature_expected_value)。
shap.plots.partial_dependence(
"AveOccup", model.predict, X100, ice=False,
model_expected_value=True, feature_expected_value=True
)
函数会迭代 X100 中的所有样本,并且对于每个样本屡次调用 model.predict 函数,批改指标特色的值,但放弃补充特色(即所有其余特色)不变。后果图显示了整个数据集上每个指标特征值的模型均匀输入。
上图中能够看到当 AveOccup 低于 2 时,预期模型 Prediction 很高,而后它迅速降落,直到 AveOccup 为 4,并且对于更高的 AveOccup 根本放弃不变。
让咱们对 MedInc 做同样的事件。
shap.plots.partial_dependence(
"MedInc", model.predict, X100, ice=False,
model_expected_value=True, feature_expected_value=True
)
看起来均匀预测家庭价格随着支出中位数的减少而减少。
上面尝试下个体条件期望图。能够再次应用 partial_dependence 函数来制作它们,但这次将 ice 参数设置为 True。
shap.plots.partial_dependence(
"AveOccup", model.predict, X100, ice=True,
model_expected_value=True, feature_expected_value=True
)
后果依然显示了 AveOccup 特色变动的均匀模型预测,即深蓝色线。然而,ICE 图还显示了每个样本的输入变动,这使咱们可能查看是否存在具备不同特色交互的样本。
例如在图表的顶部,能够看到模型预测高价的街区不会随着 AveOccup 特色的变动而产生太大变动。这些样本能够进一步的进行钻研。
同样计算 MedInc 特色的 ICE 图。
shap.plots.partial_dependence(
"MedInc", model.predict, X100, ice=True,
model_expected_value=True, feature_expected_value=True
)
该模型遵循的规定是:较高的 MedInc 表明大多数样本的价格较高,但仍有一些例外情况值得考察钻研。
当初咱们能够尝试找出 AveOccup、MedInc 和街区价格之间的关系。首先创立了一个散点图,其中 x 是 AveOccup,y 是 MedInc,每个样本色彩代表块组价格。
px.scatter(x=X["AveOccup"], y=X["MedInc"], color=y,
labels={"x": "AveOccup", "y": "MedInc", "color": "price"},
range_x=(0, 10))
具备低 AveOccup 和高 MedInc 的样本仿佛具备更高的价格,这正是咱们看到模型学到的,这要归功于局部依赖和个体条件期望图。看起来模型曾经学会了有意义的规定🙂
总结
在本文中,咱们通过一个简略据集的回归示例理解了局部依赖图 (PDP) 和个体条件期望 (ICE) 图是什么,以及如何在 Python 中制作它们。
如果你对可解释性感兴趣那么能够尝试对现有的我的项目应用局部依赖图并分析模型学习到的规定,或者能够应用 LIME 和 SHAP 理解无关可解释 AI 的模式。
https://www.overfit.cn/post/57737a1bb3dc4e9898cbef89a0929b81
作者:Fabio Chiusano