Spec-Zone.ru › scikit-learn

Примечание

Перейти к концу, чтобы загрузить весь пример кода. или запустить этот пример в вашем браузере с помощью JupyterLite или Binder

Продвинутая визуализация с использованием частичной зависимости

Объект 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.
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('mlpregressor',
                 MLPRegressor(hidden_layer_sizes=(100, 100), max_iter=500,
                              random_state=0, tol=0.01))])
StandardScaler()
MLPRegressor(hidden_layer_sizes=(100, 100), max_iter=500, random_state=0,
             tol=0.01)


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

Мы строим графики частичной зависимости для признаков «возраст» и «ИМТ» (индекс массы тела) для решающего дерева. При наличии двух признаков, 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

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

Объекты 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
<matplotlib.legend.Legend object at 0x7656b7241400>

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.876 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_partial_dependence_visualization_api.ipynb

Download Python source code: plot_partial_dependence_visualization_api.py

Download zipped: plot_partial_dependence_visualization_api.zip

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

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

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

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

Основные моменты релиза scikit-learn 0.24

© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/miscellaneous/plot_partial_dependence_visualization_api.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API