Пигам – как добавить рючок (отметки для отображения плотности данных) на ось X в графике частичной зависимости?

Вопросы и ответы

Я создал модель GAM, используя библиотеку pygam, давайте назовем мою модель “gam”. Я создаю графики частичной зависимости из моей модели, чтобы показать частичные эффекты от каждой переменной, используя код ниже на Python.

Из опыта работы с программой R, графики частичной зависимости показывают “rug plot” на оси x, демонстрируя распределение точек данных для каждой переменной. Это кажется довольно автоматическим в R, когда я строю графики частичной зависимости.

Однако в Python, используя библиотеку pygam, мои графики частичной зависимости не показывают ‘rug’ или распределение точек данных на оси x. Есть ли способ добавить это при построении графиков с помощью pygam в Python?

Вот код, который я использую в Python для построения графиков частичной зависимости из моей модели ‘gam’:

Построить графики частичной зависимости.

скриншот кода в моей среде разработки

# код модели gam выше

# ПЛОТ ДЛЯ ТЕСТА

# Установите размер фигуры
titles = ['1','2','3','4','5','6','7', '8', '9', '10', '11', '12']
# plt.rcParams['figure.figsize'] = (25, 25)
fig, axs = plt.subplots(nrows=4, ncols=3, figsize=(20, 20), layout="constrained")
axs = axs.flatten()

# Построим графики частичной зависимости.

for i in range(0,12,1):
    XX = gam.generate_X_grid(term=i)
    axs[i].plot(XX[:, i], gam.partial_dependence(term=i, X=XX), c="dimgrey", ls="solid", lw=2)
    axs[i].plot(XX[:, i], gam.partial_dependence(term=i, X=XX, width=.95)[1], c="cornflowerblue", ls="dotted",lw=1.5)
    axs[i].set_ylim(-2,2)
    #axs[i].set_xlim(8,11)
    axs[i].set_xlabel(titles[i], fontsize=12)
    axs[i].set_ylabel("Частичный Эффект", fontsize=12)
    axs[i].set_title("")
    axs[i].axhline(y=0.0, c="crimson",linewidth=0.6,zorder=0,ls=":")
fig.savefig('partial_plot_from_python.eps', format="eps", dpi=600)

Я ожидаю, что код создаст что-то похожее на изображение, показанное (сделанное в R, см. “rug”, показывающий плотность распределения точек данных на оси x).

график частичной зависимости, показывающий плотность данных на оси x

Ответ

Для добавления руга (rug plot), который показывает распределение данных по оси x в графиках частичной зависимости (partial dependence plots) с использованием библиотеки pygam, вы можете воспользоваться функцией sns.rugplot() из библиотеки seaborn. Это позволит вам визуализировать распределение точек данных для каждого переменной.

Вот как можно модифицировать ваш код для добавления рога:

import matplotlib.pyplot as plt
import seaborn as sns
from pygam import LinearGAM

# Ваш код для создания модели GAM
# Например:
# gam = LinearGAM(...).fit(X, y)

# Установите фигуру
titles = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
fig, axs = plt.subplots(nrows=4, ncols=3, figsize=(20, 20), layout="constrained")
axs = axs.flatten()

# Создайте графики частичной зависимости
for i in range(0, 12, 1):
    XX = gam.generate_X_grid(term=i)
    axs[i].plot(XX[:, i], gam.partial_dependence(term=i, X=XX), c="dimgrey", ls="solid", lw=2)
    axs[i].plot(XX[:, i], gam.partial_dependence(term=i, X=XX, width=.95)[1], c="cornflowerblue", ls="dotted", lw=1.5)

    # Добавьте rug plot
    sns.rugplot(x=X[:, i], ax=axs[i], color='black', height=0.1)

    axs[i].set_ylim(-2, 2)
    axs[i].set_xlabel(titles[i], fontsize=12)
    axs[i].set_ylabel("Частичный эффект", fontsize=12)
    axs[i].set_title("")
    axs[i].axhline(y=0.0, c="crimson", linewidth=0.6, zorder=0, ls=":")

# Сохраните график
plt.savefig('partial_plot_with_rug.eps', format="eps", dpi=600)

Объяснение кода:

  1. Импорт библиотек: Убедитесь, что у вас установлены библиотеки matplotlib, seaborn и pygam. Если они не установлены, вы можете установить их с помощью команды pip install matplotlib seaborn pygam.

  2. Создание модели GAM: В коде предполагается, что ваша модель уже создана и обучена.

  3. Создание графиков: Мы используем цикл, чтобы создать графики для всех переменных. Внутри цикла мы добавляем рог с помощью функции sns.rugplot(), которая принимает данные для соответствующей переменной. Параметр height контролирует высоту рога.

  4. Настройка графиков: Мы настраиваем оси и сохраняем график в формате EPS.

С помощью этого кода вы сможете получить графики частичной зависимости с рогом, показывающим распределение данных на оси x, аналогично тому, как это делается в R.

Оцените материал
Добавить комментарий

Капча загружается...