使用部分依赖进行高级绘图#

PartialDependenceDisplay 对象可用于绘图,而无需重新计算部分依赖。在本例中,我们将展示如何绘制部分依赖图以及如何使用可视化 API 快速自定义绘图。

import matplotlib.pyplot as plt
import pandas as pd

from sklearn.datasets import load_diabetes
from sklearn.inspection import PartialDependenceDisplay
from sklearn.neural_network import MLPRegressor
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeRegressor

在糖尿病数据集上训练模型#

首先,我们在糖尿病数据集上训练决策树和多层感知器。

diabetes = load_diabetes()
X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)
y = diabetes.target

tree = DecisionTreeRegressor()
mlp = make_pipeline(
    StandardScaler(),
    MLPRegressor(hidden_layer_sizes=(100, 100), tol=1e-2, max_iter=500, random_state=0),
)
tree.fit(X, y)
mlp.fit(X, y)
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('mlpregressor',
                 MLPRegressor(hidden_layer_sizes=(100, 100), max_iter=500,
                              random_state=0, tol=0.01))])
在 Jupyter 环境中,请重新运行此单元格以显示 HTML 表示或信任笔记本。
在 GitHub 上,HTML 表示无法渲染,请尝试使用 nbviewer.org 加载此页面。


绘制两个特征的偏依赖关系#

我们绘制了决策树的“年龄”和“bmi”(体重指数)特征的偏依赖曲线。对于两个特征,from_estimator 预计绘制两条曲线。这里,绘图函数使用由 ax 定义的空间,在两个绘图的网格中放置两条曲线。

fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("Decision Tree")
tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age", "bmi"], ax=ax)
Decision Tree

可以绘制多层感知器的偏依赖曲线。在这种情况下,line_kw 被传递给 from_estimator 以更改曲线的颜色。

fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("Multi-layer Perceptron")
mlp_disp = PartialDependenceDisplay.from_estimator(
    mlp, X, ["age", "bmi"], ax=ax, line_kw={"color": "red"}
)
Multi-layer Perceptron

将两个模型的偏依赖关系一起绘制#

The tree_dispmlp_disp PartialDependenceDisplay 对象包含重新创建偏依赖曲线所需的所有计算信息。这意味着我们可以轻松地创建额外的绘图,而无需重新计算曲线。

绘制曲线的一种方法是将它们放在同一个图形中,每个模型的曲线在每一行。首先,我们创建一个包含两行一列的两个轴的图形。这两个轴被传递给 plottree_dispmlp_disp 函数。给定的轴将被绘图函数用来绘制偏依赖关系。生成的绘图将决策树偏依赖曲线放在第一行,多层感知器放在第二行。

fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 10))
tree_disp.plot(ax=ax1)
ax1.set_title("Decision Tree")
mlp_disp.plot(ax=ax2, line_kw={"color": "red"})
ax2.set_title("Multi-layer Perceptron")
Decision Tree, Multi-layer Perceptron
Text(0.5, 1.0, 'Multi-layer Perceptron')

比较曲线的另一种方法是在彼此之上绘制它们。这里,我们创建一个包含一行两列的图形。轴被作为列表传递给 plot 函数,它将在同一个轴上绘制每个模型的偏依赖曲线。轴列表的长度必须等于绘制的绘图数量。

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 6))
tree_disp.plot(ax=[ax1, ax2], line_kw={"label": "Decision Tree"})
mlp_disp.plot(
    ax=[ax1, ax2], line_kw={"label": "Multi-layer Perceptron", "color": "red"}
)
ax1.legend()
ax2.legend()
plot partial dependence visualization api
<matplotlib.legend.Legend object at 0x7f4df82981c0>

tree_disp.axes_ 是一个 numpy 数组,它包含用于绘制偏依赖关系图的轴。这可以传递给 mlp_disp,以实现将绘图绘制在彼此之上的相同效果。此外,mlp_disp.figure_ 存储图形,这允许在调用 plot 后调整图形大小。在这种情况下,tree_disp.axes_ 有两个维度,因此 plot 将只在最左边的绘图上显示 y 标签和 y 刻度。

tree_disp.plot(line_kw={"label": "Decision Tree"})
mlp_disp.plot(
    line_kw={"label": "Multi-layer Perceptron", "color": "red"}, ax=tree_disp.axes_
)
tree_disp.figure_.set_size_inches(10, 6)
tree_disp.axes_[0, 0].legend()
tree_disp.axes_[0, 1].legend()
plt.show()
plot partial dependence visualization api

绘制一个特征的偏依赖关系#

这里,我们在同一个轴上绘制了单个特征“年龄”的偏依赖曲线。在这种情况下,tree_disp.axes_ 被传递给第二个绘图函数。

tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age"])
mlp_disp = PartialDependenceDisplay.from_estimator(
    mlp, X, ["age"], ax=tree_disp.axes_, line_kw={"color": "red"}
)
plot partial dependence visualization api

脚本的总运行时间:(0 分钟 2.966 秒)

相关示例

偏依赖和个体条件期望图

偏依赖和个体条件期望图

单调约束

单调约束

使用 KBinsDiscretizer 对连续特征进行离散化

使用 KBinsDiscretizer 对连续特征进行离散化

多输出决策树回归

多输出决策树回归

由 Sphinx-Gallery 生成的图库