Расширенное построение с использованием частичной зависимости

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом руководстве вы узнаете, как построить кривые частичной зависимости для нескольких признаков. Кривые частичной зависимости используются для анализа влияния признака на предсказанный результат машинного обучения, при этом все остальные признаки остаются постоянными. В этом руководстве показано, как построить кривые частичной зависимости для дерева решений и многослойного перцептрона на наборе данных о диабете.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49238{{"Расширенное построение с использованием частичной зависимости"}} end

Обучение моделей на наборе данных о диабете

В этом шаге мы обучим дерево решений и многослойный перцептрон на наборе данных о диабете.

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)

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

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

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

В этом шаге мы построим кривые частичной зависимости двух моделей на одном и том же графике.

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

Другой способ сравнить кривые - нарисовать их друг на друге. Здесь мы создаем фигуру с одной строкой и двумя столбцами. оси передаются в функцию PartialDependenceDisplay.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 массив, содержащий оси, используемые для рисования графиков частичной зависимости. Его можно передать в 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()

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

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

Обзор

В этом руководстве показано, как построить кривые частичной зависимости для нескольких признаков с использованием объекта PartialDependenceDisplay. Сначала мы обучили дерево решений и многослойный перцептрон на наборе данных о диабете. Затем мы построили кривые частичной зависимости для дерева решений и многослойного перцептрона для двух признаков. Далее мы построили кривые частичной зависимости двух моделей на одном графике. Наконец, мы построили кривые частичной зависимости для одного признака на одной и той же оси.