Поиск по сайту:

Как использовать визуализацию данных Seaborn для машинного обучения


Визуализация данных дает представление о распределении и взаимосвязях между переменными в наборе данных.

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

Seaborn — это библиотека визуализации данных для Python, которая работает поверх популярной библиотеки визуализации данных Matplotlib, но обеспечивает простой интерфейс и эстетически более красивые графики.

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

После завершения этого урока вы будете знать:

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

Начните свой проект с моей новой книги «Освоение машинного обучения с помощью Python», включающей пошаговые руководства и файлы исходного кода Python для все примеры.

Давайте начнем.

Обзор руководства

Это руководство разделено на шесть частей; они есть:

  • Библиотека визуализации данных Seaborn
  • Линейные графики
  • Графики гистограммы
  • Графики гистограммы
  • Диаграммы «ящик и усы»
  • Диаграммы рассеяния

Библиотека визуализации данных Seaborn

Основная библиотека построения графиков для Python называется Matplotlib.

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

Seaborn требует, чтобы сначала был установлен Matplotlib.

Вы можете установить Matplotlib напрямую с помощью pip, следующим образом:

sudo pip install matplotlib

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

# matplotlib
import matplotlib
print('matplotlib: %s' % matplotlib.__version__)

При выполнении примера печатается текущая версия библиотеки Matplotlib.

matplotlib: 3.1.2

Далее можно установить библиотеку Seaborn, также используя pip:

sudo pip install seaborn

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

# seaborn
import seaborn
print('seaborn: %s' % seaborn.__version__)

При выполнении примера выводится текущая версия библиотеки Seaborn.

seaborn: 0.10.0

Чтобы создать графики Seaborn, необходимо импортировать библиотеку Seaborn и вызвать функции для создания графиков.

Важно отметить, что функции построения графиков Seaborn ожидают, что данные будут предоставлены в виде кадров данных Pandas. Это означает, что если вы загружаете данные из файлов CSV, вы должны использовать функции Pandas, такие как read_csv(), для загрузки ваших данных в виде DataFrame. При построении графика столбцы можно указать с помощью имени DataFrame или индекса столбца.

Чтобы показать график, вы можете вызвать функцию show() в библиотеке Matplotlib.

...
# display the plot
pyplot.show()

Альтернативно графики можно сохранить в файл, например, в файл изображения в формате PNG. Функция savefig() Matplotlib может использоваться для сохранения изображений.

...
# save the plot
pyplot.savefig('my_image.png')

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

Линейные графики

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

Ось X представляет регулярный интервал, например время. На оси Y показаны наблюдения, упорядоченные по оси X и соединенные линией.

Линейный график можно создать в Seaborn, вызвав функцию lineplot() и передав данные по оси X для регулярного интервала и по оси Y для наблюдений.

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

Набор данных состоит из двух столбцов: «Месяц» и «Продажи». Месяц будет использоваться в качестве оси X, а продажи будут отображаться по оси Y.

...
# create line plot
lineplot(x='Month', y='Sales', data=dataset)

Полный пример приведен ниже.

# line plot of a time series dataset
from pandas import read_csv
from seaborn import lineplot
from matplotlib import pyplot
# load the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/monthly-car-sales.csv'
dataset = read_csv(url, header=0)
# create line plot
lineplot(x='Month', y='Sales', data=dataset)
# show plot
pyplot.show()

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

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

Графики гистограммы

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

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

Гистограмму можно создать в Seaborn, вызвав функцию countplot() и передав данные.

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

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

...
# create line plot
countplot(x=0, data=dataset)

Полный пример приведен ниже.

# bar chart plot of a categorical variable
from pandas import read_csv
from seaborn import countplot
from matplotlib import pyplot
# load the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/breast-cancer.csv'
dataset = read_csv(url, header=None)
# create bar chart plot
countplot(x=0, data=dataset)
# show plot
pyplot.show()

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

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

Этого можно добиться с помощью функции countplot() и указания переменной класса (индекс столбца 9) через аргумент «hue» следующим образом:

...
# create bar chart plot
countplot(x=0, hue=9, data=dataset)

Полный пример приведен ниже.

# bar chart plot of a categorical variable against a class variable
from pandas import read_csv
from seaborn import countplot
from matplotlib import pyplot
# load the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/breast-cancer.csv'
dataset = read_csv(url, header=None)
# create bar chart plot
countplot(x=0, hue=9, data=dataset)
# show plot
pyplot.show()

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

Дополнительные примеры построения гистограмм с помощью Seaborn см. в разделе Построение графиков с категориальными данными.

Графики гистограммы

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

Ось X представляет дискретные интервалы или интервалы для наблюдений. Например, наблюдения со значениями от 1 до 10 могут быть разделены на пять интервалов, значения [1,2] будут отнесены к первому интервалу, [3,4] будут отнесены ко второму интервалу и так далее.

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

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

Гистограмму можно создать в Seaborn, вызвав функцию distplot() и передав переменную.

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

...
# create histogram plot
distplot(dataset[[0]])

Полный пример приведен ниже.

# histogram plot of a numerical variable
from pandas import read_csv
from seaborn import distplot
from matplotlib import pyplot
# load the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv'
dataset = read_csv(url, header=None)
# create histogram plot
distplot(dataset[[0]])
# show plot
pyplot.show()

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

График показывает как гистограмму (количество интервалов), так и плавную оценку функции плотности вероятности.

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

Диаграммы «ящик и усы»

Диаграмма «ящик с усами», или сокращенно ящичная диаграмма, обычно используется для обобщения распределения выборки данных.

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

Ось Y представляет значения наблюдения. В рамке суммируются средние 50 процентов набора данных, начиная с наблюдения в 25-м процентиле и заканчивая 75-м процентилем. Это называется межквартильным размахом или IQR. Медиана, или 50-й процентиль, изображается линией.

Линии, называемые «усами», проводятся от обоих концов прямоугольника и рассчитываются как (1,5 * IQR), чтобы продемонстрировать ожидаемый диапазон разумных значений в распределении. Наблюдения за пределами усов могут быть выбросами и показаны маленькими кружками.

Ящик можно создать в Seaborn, вызвав функцию boxplot() и передав данные.

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

...
# create box and whisker plot
boxplot(x=0, data=dataset)

Полный пример приведен ниже.

# box and whisker plot of a numerical variable
from pandas import read_csv
from seaborn import boxplot
from matplotlib import pyplot
# load the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv'
dataset = read_csv(url, header=None)
# create box and whisker plot
boxplot(x=0, data=dataset)
# show plot
pyplot.show()

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

Мы видим, что медиана чуть выше 2,5 раз, а некоторые выбросы — примерно в 15 раз (вау!).

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

Этого можно добиться, вызвав функцию boxplot() и передав переменную класса в качестве оси X и числовую переменную в качестве оси Y.

...
# create box and whisker plot
boxplot(x=8, y=0, data=dataset)

Полный пример приведен ниже.

# box and whisker plot of a numerical variable vs class label
from pandas import read_csv
from seaborn import boxplot
from matplotlib import pyplot
# load the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv'
dataset = read_csv(url, header=None)
# create box and whisker plot
boxplot(x=8, y=0, data=dataset)
# show plot
pyplot.show()

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

Диаграммы рассеяния

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

Парные выборки данных означают, что для данного наблюдения были записаны два показателя, такие как вес и рост человека.

Ось X представляет значения наблюдения для первой выборки, а ось Y представляет значения наблюдения для второй выборки. Каждая точка на графике представляет одно наблюдение.

Диаграмму рассеяния можно создать в Seaborn, вызвав функцию scatterplot() и передав две числовые переменные.

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

...
# create scatter plot
scatterplot(x=0, y=1, data=dataset)

Полный пример приведен ниже.

# scatter plot of two numerical variables
from pandas import read_csv
from seaborn import scatterplot
from matplotlib import pyplot
# load the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv'
dataset = read_csv(url, header=None)
# create scatter plot
scatterplot(x=0, y=1, data=dataset)
# show plot
pyplot.show()

При выполнении примера сначала загружается набор данных о диабете и создается диаграмма рассеяния первых двух входных переменных.

Мы можем видеть несколько однородную связь между двумя переменными.

Мы также можем захотеть построить график зависимости пары числовых переменных от метки класса.

Этого можно добиться с помощью функции scatterplot() и указания переменной класса (индекс столбца 8) через аргумент «hue» следующим образом:

...
# create scatter plot
scatterplot(x=0, y=1, hue=8, data=dataset)

Полный пример приведен ниже.

# scatter plot of two numerical variables vs class label
from pandas import read_csv
from seaborn import scatterplot
from matplotlib import pyplot
# load the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv'
dataset = read_csv(url, header=None)
# create scatter plot
scatterplot(x=0, y=1, hue=8, data=dataset)
# show plot
pyplot.show()

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

Дальнейшее чтение

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

Учебники

  • Нежное введение в методы визуализации данных в Python

API

  • Домашняя страница Сиборн.
  • Официальное руководство Seaborn.

Краткое содержание

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

В частности, вы узнали:

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

У вас есть вопросы?
Задавайте свои вопросы в комментариях ниже, и я постараюсь ответить.