Регрессия | Вводный курс ML

Регрессия

Все курсы > Вводный курс > Занятие 14

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

Обучение с учителем и без

Про машинное обучение с учителем (Supervised Machine Learning) говорят в том случае, когда в данных, на которых мы обучаем модель, уже заложен некоторый результат. Это может быть конкретное число (например, окружность шеи в задаче регрессии) или принадлежность к определенному классу (тип заемщика в задаче классификации). Другими словами, в этих данных есть зависимая переменная y.

В случае, если такого результата нет, речь идет об обучении без учителя (Unsupervised Machine Learning). Такой тип алгоритмов встречается в задаче кластеризации, когда нужно выделить группу или кластер объектов, но сами эти кластеры заранее не известны (в отличие от классов при классификации).

Структура машинного обучения: обучение с учителем и без

Теперь давайте поговорим откуда мы будем брать данные.

Модуль datasets библиотеки Scikit-learn

В учебных целях мы будем использовать классические наборы данных, которые уже содержатся в библиотеке Scikit-learn в модуле datasets. Нас будут интересовать три набора данных:

Регрессия

По традиции вначале откроем ноутбук к этому занятию

Этап 1. Загрузка данных — недвижимость в Бостоне

Регрессия: цены на жилье в Бостоне

Вначале загрузим данные.

Наш набор данных является объектом Bunch, который в свою очередь, представляет собой подкласс питоновского словаря. Это значит, что его структуру мы можем увидеть с помощью метода .keys().

В разделе data содержится информация о признаках (независимые переменные). В target содержится целевая (зависимая) переменная, в feature_names — наименование признаков, а DESCR содержит описание датасета.

Начнем с общего обзора. Для этого прочитаем описание.

Каждая единица данных — это район города Бостон. У нас есть информация об уровне преступности (CRIM), качестве воздуха (NOX), транспортной доступности (RAD), налогах (TAX), количестве учителей (PTRATIO), социальном положении населения (LSTAT) и некоторые другие показатели. Целевой переменной является медианная цена недвижимости в каждом из районов (MEDV). Именно ее нам и нужно научиться предсказывать.

Давайте выведем информацию по первым пяти районам. Так как читать сырые данные (в формате массива Numpy) не очень удобно, мы преобразуем их в формат DataFrame из библиотеки Pandas.

Набор данных для построения модели регрессии: признаки
Набор данных для построения модели регрессии: признаки и целевая переменная

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

Как мы видим, все переменные, включая целевую, являются количественными (тип float). Помимо этого, мы можем посмотреть основные статистические показатели (summary statistics):

Основные статистические показатели

В частности, мы видим количество наблюдений (count), среднее арифметическое (mean), среднее квадратическое отклонение (std), минимальное (min) и максимальное (max) значения, а также первый (25%), второй (50%) и третий (75%) квартиль (второй квартиль это то же самое, что медиана) каждой количественной переменной. Подробнее об этом мы поговорим, когда будем изучать анализ данных на более продвинутом уровне.

Прекрасно, мы уже примерно понимаем, с чем нам предстоит работать.

Этап 2. Предварительная обработка данных

Данные редко поступают в идеальном виде. На этапе предварительной обработки данных (data pre-processing) нам необходимо понять:

  • что мы будем делать с пропущенными значениями (missing values) и повторами (duplicates),
  • как поступим с категорийными переменными (ведь компьютер не понимает, чем отличается одна категория от другой), и
  • как не ухудшить модель из-за того, что диапазон или масштаб одной переменной сильно отличается от масштаба другой.

В работе с этим датасетом пока просто отметим, что пропущенные значения отсутствуют. Это видно из описания и, кроме того, мы можем посчитать пропущенные значения с помощью функций .isnull() и .sum().

Этап 3. Исследовательский анализ данных

Теперь выполним то, что часто называют исследовательским или разведочным анализом данных (Exploratory Data Analysis, EDA). По большом счету, от нас требуется понять какие взаимосвязи мы можем выявить между переменными, чтобы потом построить модель.

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

корреляционная матрица

Такой способ представления корреляции называется корреляционной матрицей. В ней, в частности, мы видим (смотрите на последний столбец или строку), что переменные RM и LSTAT имеют достаточно сильную корреляцию с целевой переменной MEDV, 0,70 и −0,74, соответственно. Также умеренная корреляция наблюдается у переменных PTRATIO, TAX и INDUS.

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

Диаграмма рассеяния: социальный статус населения и цены на жилье
Диаграмма рассеяния: среднее количество комнат и цены на жилье

Этап 4. Отбор и выделение признаков

После того, как мы собрали достаточно данных о взаимосвязи переменных, мы можем начать отбор наиболее значимых признаков (feature selection) и создание или выделение новых (feature extraction). В текущим исследовании, в частности, мы возьмем переменные RM, LSTAT, PTRATIO, TAX и INDUS, поскольку они имеют наиболее высокую корреляцию с целевой переменной MEDV. Создавать новые признаки мы пока не будем.

Поместим наши признаки в переменную X, а цены на жилье в переменную y.

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

Этап 5. Обучение и оценка качества модели

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

Посмотрим на размерность новых наборов данных:

Теперь обучим модель и сделаем прогноз. Мы это уже делали на прошлом занятии.

Осталось оценить качество модели. Посчитаем среднеквадратическую ошибку.

Также рассчитаем новый для нас критерий качества — коэффициент детерминации (R2 или R-квадрат). R2 показывает какая доля изменчивости целевой переменной объясняется с помощью нашей модели.

В данном случае мы видим, что 65% изменчивости цены объясняется независимыми переменными, которые мы выбрали для нашей модели.

Конечно, обе эти метрики можно улучшить, и именно такими улучшениями мы и будем заниматься на последующих курсах.

Вопросы для закрепления

Чем обучение с учителем отличается от обучения без учителя?

Ответ: при обучении с учителем мы задаем нашей модели цель (y), к которой она должна стремиться в процессе оптимизации, при обучении без учителя такой цели нет.

Чем регрессия отличается от классификации?

Ответ: регрессия предсказывает число, классификация относит объекты к определенному классу

Что показывает коэффициент детерминации?

Ответ: коэффициент детерминации (R2) показывает долю изменчивости целевой переменной (y), которую мы можем объяснить с помощью нашей модели. Если R2 равен единице (100%), то наша модель полностью объясняет любые изменения в целевой переменной. Если R2 равен нулю (0%), наша модель никак не объясняет эти изменения.

Дополнительные упражнения⧉ вы найдете в конце ноутбука.

Подведем итог

Сегодня мы выполнили первое полноценное исследование данных и построили модель. Мы (1) начали с того, что подгрузили данные из библиотеки Scikit-learn, (2) обработали и (3) исследовали данные, а также (4) отобрали наиболее значимые признаки. После этого мы (5) построили модель регрессии и оценили ее качество.

Теперь мы готовы к изучению алгоритма классификации.

guest
3 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Анастасия

Скажите, а почему вы всегда используете число 42, например, в random_state=42 и в np.random.seed(42)?

Анастасия

Спасибо!!