Расширенное построение графиков с частичной зависимостью#

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



Построение графиков частичной зависимости для двух признаков#

Мы строим кривые частной зависимости для признаков "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)
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_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")
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

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()
plot partial dependence visualization api

Построение частичной зависимости для одного признака#

Здесь мы строим кривые частных зависимостей для одного признака, "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"}
)
plot partial dependence visualization api

Общее время выполнения скрипта: (0 минут 2.437 секунд)

Связанные примеры

Графики частичной зависимости и индивидуального условного ожидания

Графики частичной зависимости и индивидуального условного ожидания

Монотонные ограничения

Монотонные ограничения

Использование KBinsDiscretizer для дискретизации непрерывных признаков

Использование KBinsDiscretizer для дискретизации непрерывных признаков

Основные нововведения scikit-learn 0.24

Основные нововведения scikit-learn 0.24

Галерея, созданная Sphinx-Gallery