Seaborn residplot – Построение остатков линейной регрессии

В этом учебнике вы узнаете, как создать график остатков с помощью Seaborn, используя функцию sns.residplot(). Графики остатков позволяют оценить остатки аппроксимации регрессии, легко понимая их различия.

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

  • Что такое остаточные графики и как их создать с помощью функции sns.residplot()

  • Как изменить порядок аппроксимации базовой регрессии

  • Как настроить остаточные графики в Seaborn, используя цвета и линии Lowess

Оглавление

Что такое остаточный участок?

График остатков используется для отображения остаточных значений после построения модели линейной регрессии. Это позволяет легко определить, насколько хороша подгонка модели регрессии.

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

Creating a customized residplot in Seaborn
Понимание residplots в Seaborn

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

Понимание функции Seaborn residplot

Перед тем как перейти к построению остаточных графиков, давайте на момент рассмотрим функцию sns.residplot(). Как вы можете видеть в приведенном ниже блоке кода, функция имеет множество различных параметров и аргументов по умолчанию. Хотя мы не будем исследовать их все в этом учебнике, вы узнаете о важных из них.

# Понимание функции residplot() в Seaborn
seaborn.residplot(data=None, *, x=None, y=None, x_partial=None, y_partial=None, lowess=False, order=1, robust=False, dropna=True, label=None, color=None, scatter_kws=None, line_kws=None, ax=None)

Давайте исследуем некоторые важные параметры функции

  • data: Набор данных.

  • x, y: Имена переменных в данных для осей x и y соответственно.

  • x_partial, y_partial: Дополнительные переменные для частичной регрессии.

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

  • order: Порядок полинома для подгонки регрессионной линии.

  • robust: Булевое значение, указывающее, следует ли использовать робастные методы оценки регрессии.

  • dropna: Булевое значение, указывающее, следует ли удалять отсутствующие значения из данных.

  • label: Метка для графика.

  • color: Цвет точек на графике.

  • scatter_kws: Дополнительные параметры для управления внешним видом точек.

  • line_kws: Дополнительные параметры для управления внешним видом линии регрессии.

  • ax: Объект оси Matplotlib, на котором будет построен график.

Теперь, когда вы узнали о некоторых более важных параметрах функции, давайте перейдем к построению графика остатков.

Построение невязок регрессии в Seaborn с помощью residplot

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

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

# Загрузка набора данных о чаевых
df = sns.load_dataset('tips')

# Установка цветовой палитры
sns.set_palette('Set2')

# Построение графика регрессии
sns.regplot(data=df, x='total_bill', y='tip')

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

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

Plotting a Simple relplot
Построение простого перераспределения

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

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

# Загрузка набора данных о чаевых
df = sns.load_dataset('tips')

# Установка цветовой палитры
sns.set_palette('Set2')

# Построение графика остатков
sns.residplot(data=df, x='total_bill', y='tip')

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

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

Посмотрите на график ниже, чтобы узнать, что будет возвращено:

Plotting a residplot in Seaborn
Создание участка проживания в Сиборне

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

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

Изменение порядка остатков регрессии в residplot Seaborn

Одно из преимуществ построения графика остатков заключается в том, что он может выявить несоответствие модели. Например, если регрессионная модель должна быть другого порядка, построение графика остатков подчеркнет это.

В приведенном ниже блоке кода мы загружаем новый набор данных. Затем мы строим график зависимости мощности автомобиля от его расхода топлива на галлон:

# Графики остатков могут показать подходящую аппроксимацию
import seaborn as sns
import matplotlib.pyplot as plt

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

# Установка цветовой палитры
sns.set_palette('Set2')

# Построение графика остатков для переменных 'horsepower' и 'mpg'
sns.residplot(data=df, x="horsepower", y="mpg")

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

Используя приведенный выше код, мы получаем ниже представленную визуализацию данных:

Using a Seaborn residplot Can Show Incorrect Order
Использование residplot Seaborn может отображать неправильный порядок

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

Чтобы изменить порядок базовой модели регрессии на графике остатков в Seaborn, вы можете использовать параметр order=. Давайте изменим порядок модели на 2.

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

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

# Установка цветовой палитры
sns.set_palette('Set2')

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

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

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

Creating a Seaborn residplot with a Different Order
Создание резидентного графика Seaborn с другим порядком

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

Добавление линии Лоусса к резидентному графику Seaborn

Seaborn позволяет добавлять линию LOWESS к residplot, используя lowess=True. Линия LOWESS (локально взвешенное сглаживание точечных диаграмм) создает гладкую линию на графике, чтобы помочь вам лучше понять взаимосвязь между двумя переменными.

Давайте посмотрим, как мы можем использовать Seaborn для добавления линии LOWESS:

# Добавление линии Lowess
import seaborn as sns
import matplotlib.pyplot as plt

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

# Установка цветовой палитры
sns.set_palette('Set2')

# Построение графика остатков с линией Lowess
sns.residplot(data=df, x="horsepower", y="mpg", lowess=True)

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

В приведенном ниже блоке кода мы построили предыдущую зависимость, используя первый порядок. Мы также попросили Seaborn построить линию lowess. Это привело к визуализации ниже:

Adding a Lowess Line to a Seaborn residplot
Добавление линии Лоусса к резидентному графику Seaborn

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

В следующем разделе вы научитесь изменять цвет линии lowess.

Раскраска линии Лоусса на графике проживания Seaborn

По умолчанию Seaborn использует тот же цвет для линии LOWESS, что и для базовой диаграммы рассеяния. Это означает, что линия может быть немного трудно заметной. Для настройки параметров, таких как цвет линии LOWESS, можно использовать параметр line_kws=

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

# Окрашивание линии Lowess
import seaborn as sns
import matplotlib.pyplot as plt

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

# Установка цветовой палитры
sns.set_palette('Set2')

# Построение графика остатков с окрашенной линией Lowess
sns.residplot(data=df, x="horsepower", y="mpg", lowess=True, line_kws={'color': 'cornflowerblue'})

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

В приведенном выше блоке кода мы использовали line_kws={'color': 'cornflowerblue'}, что указывает на то, что линия должна быть окрашена в светло-синий цвет.

Теперь мы видим, насколько легче стало разглядеть линию, что делает основные тенденции гораздо более очевидными.

Настройка residplot Seaborn с помощью заголовка и меток осей

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

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

# Настройка графика residplot в Seaborn
import matplotlib.pyplot as plt
import seaborn as sns

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

# Установка цветовой палитры
sns.set_palette('Set2')

# Создание фигуры и подграфиков
fig, axs = plt.subplots(ncols=2)

# Построение регрессионного и остаточного графиков
sns.regplot(data=df, x="horsepower", y="mpg", order=2, ax=axs[0], line_kws={'color':'cornflowerblue'})
sns.residplot(data=df, x="horsepower", y="mpg", order=2, ax=axs[1])

# Настройка заголовка
fig.suptitle('Сравнение графиков регрессии и остатков', weight='bold')
fig.subplots_adjust(top=0.85)

# Настройка заголовков подграфиков
axs[0].set_title('График регрессии')
axs[1].set_title('График остатков')

# Настройка меток осей
for ax in axs:
    ax.set_xlabel('Лошадиные силы автомобиля')
    ax.set_ylabel('Мили на галлон')

# Настройка компактного расположения графиков
fig.tight_layout()
sns.despine()

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

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

Чтобы установить общий заголовок, мы используем метод suptitle(), так как нам нужно применить заголовок ко всей фигуре. Затем мы используем метод .set_title() для каждого из объектов осей, обращаясь к индексированному значению. Наконец, мы перебираем каждую ось и используем методы .set_xlabel() и

Это возвращает изображение ниже:

Добавляя и настраивая заголовки и подписи осей, мы можем создать информативную визуализацию.

Заключение

В этом уроке вы научились создавать график остатков с использованием Seaborn, применяя функцию sns.residplot(). Графики остатков позволяют легко оценить остатки после подгонки регрессии, понимая их различия.

Сначала вы научились создавать графики остатков, используя модель простой линейной регрессии. Затем вы узнали, как изменить порядок основной регрессионной модели. После этого вы научились добавлять и настраивать линию LOWESS. Наконец, вы научились добавлять заголовок и настраивать подписи осей на графике остатков в Seaborn.

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

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

Last updated