Примечание
Перейти в конец чтобы скачать полный пример кода или запустить этот пример в браузере через JupyterLite или Binder.
Расширенное построение графиков с частичной зависимостью#
The PartialDependenceDisplay объект может использоваться для построения графиков без необходимости пересчитывать частичную зависимость. В этом примере мы показываем, как строить графики частичной зависимости и как быстро настраивать график с помощью API визуализации.
Примечание
Смотрите также Кривая ROC с API визуализации
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
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)
Построение графиков частичной зависимости для двух признаков#
Мы строим кривые частной зависимости для признаков "age" и "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)

Кривые частичной зависимости могут быть построены для многослойного перцептрона.
В этом случае, 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"}
)

Построение частных зависимостей двух моделей вместе#
The tree_disp и mlp_disp
PartialDependenceDisplay Объекты содержат всю вычисленную информацию, необходимую для воссоздания кривых частичной зависимости. Это означает, что мы можем легко создавать дополнительные графики без необходимости пересчитывать кривые.
Один из способов построения кривых — разместить их на одном рисунке,
с кривыми каждой модели в каждой строке. Сначала мы создаём рисунок с двумя осями
в двух строках и одном столбце. Две оси передаются в
plot функции
tree_disp и mlp_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")

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()

tree_disp.axes_ является контейнером numpy array, содержащим оси, используемые для построения
графиков частичной зависимости. Это может быть передано в 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()

Построение частичной зависимости для одного признака#
Здесь мы строим кривые частных зависимостей для одного признака, "age", на
тех же осях. В этом случае, 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"}
)

Общее время выполнения скрипта: (0 минут 2.437 секунд)
Связанные примеры
Графики частичной зависимости и индивидуального условного ожидания
Использование KBinsDiscretizer для дискретизации непрерывных признаков