Регрессионные графики в Seaborn с использованием regplot и lmplot

В этом руководстве вы научитесь использовать Seaborn для создания графиков регрессии с помощью функций sns.regplot() и sns.lmplot(). Может показаться странным, что Seaborn предлагает две функции для построения регрессивных отношений. Не волнуйтесь — это руководство упростит все, что вам нужно знать.

К концу этого урока вы научитесь следующему:

  • Как использовать функции Seaborn regplot() и lmplot() для построения графиков регрессии

  • Как понять разницу между двумя функциями

  • Как настроить графики с небольшими кратными, заголовками и метками осей

  • Как построить графики логистической регрессии и построить регрессионные отношения в совместных графиках Seaborn

Содержание

Понимание функций Seaborn regplot() и lmplot()

Seaborn предлагает две функции для создания графиков регрессии: regplot и lmplot. Несмотря на кажущееся дублирование, эти две функции предоставляют различный функционал.

Основные различия между двумя регрессионными функциями заключаются в следующем:

  1. Функция sns.lmplot() возвращает график (точнее, FacetGrid) и может использоваться для отображения дополнительных переменных с помощью цветовой семантики.

  2. sns.regplot() возвращает объект осей, что позволяет легко применять методы уровня осей.

Давайте рассмотрим, как можно использовать функцию sns.lmplot() для построения линейной зависимости:

# Создание простого lmplot в Seaborn
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка набора данных о пингвинах
df = sns.load_dataset('penguins')

# Построение lmplot
sns.lmplot(data=df, x='flipper_length_mm', y='body_mass_g')

# Отображение графика
plt.show()

В приведенном выше примере мы загрузили набор данных о пингвинах, встроенный в Seaborn. Затем мы использовали функцию lmplot() для построения отношения между длиной ласт и массой тела. Это привело к созданию изображения ниже:

Теперь давайте посмотрим, как мы можем использовать функцию regplot() для построения того же отношения:

# Создание простого regplot в Seaborn
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка набора данных о пингвинах
df = sns.load_dataset('penguins')

# Построение regplot
sns.regplot(data=df, x='flipper_length_mm', y='body_mass_g')

# Отображение графика
plt.show()

В приведенном выше блоке кода мы просто изменили функцию на использование функции regplot(). Это привело к следующему изображению:

Мы видим, что, сравнивая оба графика, можно заметить, что они отображают одну и ту же зависимость, хотя визуально они различаются. Например, функция lmplot() возвращает график, который был без осевых линий и имеет другой размер.

Когда линия лучше соответствует данным, значение R-квадрата результата регрессии будет приближаться к 1.

Как построить график зависимости различных заказов с помощью Seaborn lmplot

Функции regplot() и lmplot() в Seaborn позволяют строить взаимосвязи регрессии различных порядков. Для этого мы можем использовать аргумент order=, который позволяет передавать различные порядки в любую из функций.

Давайте загрузим другой набор данных, который использует квадратичную зависимость. В следующем блоке кода мы укажем другой порядок:

# Изменение порядка Seaborn графика регрессии
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка набора данных о расходе топлива
df = sns.load_dataset('mpg')

# Построение графика регрессии с порядком 2
sns.lmplot(data=df, x='horsepower', y='mpg', order=2)

# Отображение графика
plt.show()

Путём изменения порядка до 2, мы получаем график ниже, где кривая лучше отображает данные:

В следующем разделе вы узнаете, как добавить дополнительную переменную, используя семантику цвета.

Добавление оттенков переменных в Seaborn lmplot

Чтобы добавить дополнительную переменную с использованием семантики цвета, можно передать параметр hue= в функцию lmplot(). Это основное отличие между двумя функциями: только функция lmplot() позволяет передать дополнительную переменную для отображения ее цветом.

Давайте рассмотрим, как мы можем разделить данные по другой переменной. В качестве дополнительного бонуса мы добавим разделение данных с использованием различных маркеров. Это позволит сделать данные более доступными, особенно при печати в черно-белом режиме.

# Использование параметра Hue для добавления дополнительной переменной в Seaborn lmplot()
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка набора данных о пингвинах
df = sns.load_dataset('penguins')

# Построение lmplot с использованием параметра Hue для видов пингвинов и настройкой маркеров
sns.lmplot(data=df, x='flipper_length_mm', y='body_mass_g', hue='species', markers=['x', 'o', '*'])

# Отображение графика
plt.show()

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

В следующем разделе вы научитесь строить график зависимости логистической регрессии с помощью lmplot в Seaborn.

Построение логистической регрессии на графике Seaborn

Функции regplot() и lmplot() библиотеки Seaborn позволяют вам построить кривую логистической регрессии, используя параметр

Для моделирования этой зависимости давайте рассмотрим связь между полом пингвина и его массой тела. Чтобы данные были более наглядными, добавим некоторый уровень вертикального разброса, который лучше показывает распределение:

# Преобразование переменной 'sex' в числовой формат
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка набора данных о пингвинах
df = sns.load_dataset('penguins')

# Преобразование категориальной переменной 'sex' в числовой формат
df['sex'] = df['sex'].map({'Male': 1, 'Female':0})

# Построение логистической регрессии с параметрами y_jitter и logistic
sns.lmplot(data=df, x='body_mass_g', y='sex', logistic=True, y_jitter=0.05)

# Отображение графика
plt.show()

В приведенном выше блоке кода мы указали Seaborn построить линию логистической регрессии, а также добавили немного "джиттера" к точечным диаграммам. Это приводит к следующему изображению ниже:

В следующем разделе вы узнаете, как строить малые множества (строки и столбцы) визуализаций.

Создание небольших кратных (строк и столбцов) графиков регрессии

Одной из наиболее впечатляющих возможностей библиотеки Seaborn является легкость добавления множественных графиков. Поскольку эти визуализации предполагают наличие нескольких изображений, нам необходимо использовать функцию уровня фигуры lmplot(). Давайте сначала рассмотрим добавление колонок графиков с использованием параметра

# Создание маленьких графиков регрессии
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка набора данных о пингвинах
df = sns.load_dataset('penguins')

# Создание маленьких графиков регрессии с использованием параметра col для каждого вида пингвина
sns.lmplot(data=df, x='flipper_length_mm', y='body_mass_g', col='species')

# Отображение графиков
plt.show()

В приведенном выше блоке кода мы добавили col='species'. Это позволяет выделить каждый вид в свой собственный график и отобразить связи, как показано ниже:

Что замечательно в этом подходе, так это то, что мы можем добавить еще больше информации, используя семантику цвета. Для этого мы можем использовать параметр hue=, как показано ниже.

# Использование параметра Hue для добавления дополнительной переменной в Seaborn lmplot()
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка набора данных о пингвинах
df = sns.load_dataset('penguins')

# Построение lmplot с использованием параметра Hue для переменной пола и разделением на графики по видам пингвинов
sns.lmplot(data=df, x='flipper_length_mm', y='body_mass_g', col='species', hue='sex')

# Отображение графиков
plt.show()

При разделении данных с использованием параметра hue=, мы можем увидеть, как данные распределяются как по видам, так и по полу пингвина, как показано ниже:

Наконец, мы также можем разделить наши мелкие множества, используя параметр row=. Это позволяет вам создавать матрицу из строк и колонок визуализаций, разделенных по двум разным переменным. Давайте посмотрим, как это выглядит:

# Добавление строк и столбцов данных в Seaborn lmplot
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка набора данных о пингвинах
df = sns.load_dataset('penguins')

# Построение lmplot с разделением на графики по видам пингвинов и полу
sns.lmplot(data=df, x='flipper_length_mm', y='body_mass_g', col='species', row='sex')

# Отображение графиков
plt.show()

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

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

Построение регрессионного графика в Seaborn Jointplot

Seaborn также позволяет вам визуализировать взаимосвязи регрессии с помощью совмещенного графика. Это позволяет вам наглядно увидеть линию регрессии, а также оценить распределение значений каждой из переменных. Давайте посмотрим, как мы можем это сделать:

# Построение совместного графика с контекстом регрессии
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка набора данных о пингвинах
df = sns.load_dataset('penguins')

# Построение совместного графика с контекстом регрессии
sns.jointplot(data=df, x='flipper_length_mm', y='body_mass_g', kind='reg')

# Отображение графика
plt.show()

В указанном выше блоке кода мы использовали функцию sns.jointplot() и применили аргумент kind='reg', чтобы построить линию регрессии. Ниже представлен полученный результат:

На приведенном выше графике мы построили совместный график с линией регрессии, а также нарисовали гистограммы данных вдоль краев графика.

Заключение

В этом уроке вы научились использовать Seaborn для построения регрессионных графиков с помощью функций sns.regplot() и sns.lmplot(). Сначала вы узнали различия между этими двумя функциями. Затем вы научились создавать простые регрессионные графики. После этого вы узнали, как изменять порядок зависимости, а также как строить модели логистической регрессии. Наконец, вы научились создавать небольшие множества визуализаций, а также использовать совместные графики для построения линий регрессии.

Дополнительные ресурсы

Чтобы узнать больше о схожих темах, ознакомьтесь с учебными пособиями ниже:

Last updated