Логистическая регрессия — это довольно распространенный алгоритм машинного обучения, который используется для прогнозирования категориальных результатов. В этом сообщении блога я покажу вам процесс создания модели логистической регрессии в Python с использованием Jupyter Notebooks.

Мы будем использовать набор данных «Титаник» от kaggle, который представляет собой набор точек данных, включая возраст, пол, стоимость билета и т. д., всех пассажиров на борту «Титаника». Набор данных имеет 891 строку и 12 столбцов. Цель состоит в том, чтобы увидеть, можем ли мы предсказать, умрет ли тот или иной пассажир или выживет. Надеюсь, вы понимаете, почему логистическая регрессия является подходящей моделью для решения этой проблемы.

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

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

Теперь давайте загрузим набор данных и посмотрим на фрейм данных.

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

Обобщение данных

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

Вычисление выбросов

Существует несколько способов расчета выбросов. Я решил использовать межквартильный диапазон (IQR). Чтобы быть кратким и точным, я предполагаю, что вы знакомы с концепциями IQR, поэтому я расскажу только о том, как кодировать его на Python. Если вы считаете, что вам нужно освежить память, я бы порекомендовал посмотреть этот пост в блоге.

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

  1. Я получил доступ к значениям 25-го и 75-го процентиля в столбцах «Возраст» и «Тариф».
  2. Затем я рассчитал межквартильный диапазон, нижние и верхние границы, используя эти процентные значения.
  3. Я также рассчитал значения 98-го и 2-го процентиля.
  4. Я сравнил значения в каждом столбце с верхней и нижней границами. Если они выходили за границы, я заменял их значением 98-го или 2-го процентиля.

Визуализация данных

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

Вот распределение для «Возраст» и «Тариф»:

Создание модели

Идентифицирующие особенности

При создании модели важно определить все значения признаков. В этом случае я избавился от некоторых столбцов, таких как «ID пассажира», «Имя» и «Билет», потому что я не думал, что имя или идентификатор человека влияют на его шансы на выживание.

Я исключил другие столбцы, такие как «Каюта», просто потому, что в них было слишком много нулевых значений.

Кодирование значений

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

Тренировочный тестовый сплит

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

Анализ модели

Есть несколько показателей для анализа точности модели. Из библиотеки sklearn.metrics я импортировал матрицу путаницы, отчет о классификации и оценку auc/roc.

Эти инструменты очень удобны при оценке эффективности модели.