Самое простое руководство по машинному обучению и логистической регрессии с R.

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

Заинтересованы в машинном обучении для начинающих? Вот подробное руководство по линейной регрессии с R.

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

Статья построена следующим образом:

  • Введение в логистическую регрессию
  • Загрузка и исследование набора данных
  • Разработка функций и обработка отсутствующих данных
  • Моделирование
  • Создание прогнозов
  • Заключение

Введение в логистическую регрессию

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

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

Это не совсем так. Логистическая регрессия сообщает нам, что вероятность ответа равна Да, и затем мы используем предопределенный порог для назначения классов. Например, если вероятность больше 0,5, назначенным классом будет Да, в противном случае - Нет. Оценка производительности с различными пороговыми значениями может уменьшить количество ложных срабатываний или ложноотрицательных результатов, в зависимости от того, как вы хотите действовать.

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

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

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

Загрузка и исследование набора данных

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

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

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

Вот соответствующая структура:

Требуется много работы. Например, отсутствующие значения в некоторых столбцах помечаются пустыми строками вместо NA. Эту проблему легко исправить, и как только вы ее исправите, вы сможете построить карту отсутствия. Он покажет вам, где находятся недостающие значения:

Карта недостачи представлена ​​ниже:

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

Разработка функций и обработка отсутствующих данных

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

Но эта функция весьма полезна. Вы можете извлечь из него титул пассажира (например, Мисс, Сэр и т. Д.). В качестве последнего шага вы можете проверить, есть ли у пассажира редкий титул (например, Дона, Lady, Major и т. Д.).

Следующий фрагмент делает именно это:

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

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

Уникальные номера колод показаны на следующем изображении:

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

Наконец, вы можете сместить фокус на недостающие значения. Будут использоваться два подхода - режим и вменение MICE.

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

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

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

Визуализация показана ниже:

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

Наконец, вы можете присвоить результаты вменения исходному набору данных и преобразовать Deck в коэффициент:

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

Моделирование

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

Следующий фрагмент кода случайным образом разбивает данные в соотношении 70:30. Не забудьте установить начальное значение 42, если хотите такое же разбиение:

Теперь вы можете обучить модель на обучающем наборе. R использует функцию glm() для применения логистической регрессии. Синтаксис такой же, как у линейной регрессии. Вам нужно будет поместить целевую переменную слева, а функции - справа, разделив их знаком ~. Если вы хотите использовать все функции, поставьте точку (.) Вместо имен функций.

Также не забудьте указать family = "binomial", так как это требуется для логистической регрессии:

Вот краткое изложение модели:

Самое интересное здесь - это P-значения, отображаемые в столбце Pr(>|t|). Эти значения указывают на вероятность того, что переменная не важна для прогноза. Обычно используется 5% -ный порог значимости, поэтому, если значение P составляет 0,05 или ниже, мы можем сказать, что вероятность его несущественности для анализа мала.

Вы также можете явно изучить важность функций с помощью функции varImp(). Вот как отсортировать десять наиболее важных функций:

Характеристики показаны ниже:

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

Создание прогнозов

Как упоминалось во введении, логистическая регрессия основана на вероятностях. Если вероятность больше некоторого порога (обычно 0,5), вы можете рассматривать этот экземпляр как положительный.

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

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

И вот соответствующие результаты:

221 из 268 записей были классифицированы правильно, что дает точность 82,5%. Есть 26 ложных срабатываний и 21 ложноотрицательный результат. Вы можете поиграть с порогами классификации (сейчас 0,5) и посмотреть, как меняются эти неправильные классификации.

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

Заключение

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

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

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

Первоначально опубликовано на https://appsilon.com 9 января 2021 г.