在机器学习中,偏依赖图是一种可视化工具,用于展示模型预测结果对特定特征的依赖程度。本文将介绍如何使用Python的matplotlib和sklearn库来绘制决策树和多层感知器(MLP)模型的偏依赖图,并通过可视化API进行快速定制。
首先,使用糖尿病数据集来训练一个决策树和一个多层感知器模型。以下是使用Python代码进行模型训练的过程。
from sklearn.datasets import load_diabetes
from sklearn.tree import DecisionTreeRegressor
from sklearn.neural_network import MLPRegressor
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# 加载数据集
diabetes = load_diabetes()
X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)
y = diabetes.target
# 训练决策树模型
tree = DecisionTreeRegressor()
tree.fit(X, y)
# 训练多层感知器模型
mlp = make_pipeline(StandardScaler(), MLPRegressor(hidden_layer_sizes=(100, 100), tol=1e-2, max_iter=500, random_state=0))
mlp.fit(X, y)
接下来,将为决策树和多层感知器模型绘制偏依赖图。将关注“年龄”和“体重指数(BMI)”这两个特征。
import matplotlib.pyplot as plt
from sklearn.inspection import PartialDependenceDisplay
# 绘制决策树的偏依赖图
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("决策树")
tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age", "bmi"], ax=ax)
# 绘制多层感知器的偏依赖图,设置曲线颜色为红色
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("多层感知器")
mlp_disp = PartialDependenceDisplay.from_estimator(mlp, X, ["age", "bmi"], ax=ax, line_kw={"color": "red"})
可以将两个模型的偏依赖图绘制在同一图表中,以便进行比较。以下是如何在同一图表中绘制两个模型的偏依赖图的代码示例。
# 创建一个包含两个子图的图表
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 10))
# 在第一个子图中绘制决策树的偏依赖图
tree_disp.plot(ax=ax1)
ax1.set_title("决策树")
# 在第二个子图中绘制多层感知器的偏依赖图
mlp_disp.plot(ax=ax2, line_kw={"color": "red"})
ax2.set_title("多层感知器")
除了绘制两个特征的偏依赖图外,还可以绘制单个特征的偏依赖图。以下是如何绘制单个特征“年龄”的偏依赖图的代码示例。
# 绘制单个特征“年龄”的偏依赖图
tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age"])
mlp_disp = PartialDependenceDisplay.from_estimator(mlp, X, ["age"], ax=tree_disp.axes_, line_kw={"color": "red"})