Тестирование различных моделей для набора данных Titanic

Недавно я обнаружил мощь библиотеки Python под названием Sci-kit learn для машинного обучения. API распространяется на несколько моделей машинного обучения, что упрощает и ускоряет обучение. В этом сообщении блога я демонстрирую, как использовать несколько моделей классификации в sklearn со знаменитым набором данных titanic.

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

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

Из 891 пассажира в нашем наборе данных 687 из них имеют пустые столбцы Cabin. Ради этого сообщения в блоге я просто игнорирую эту колонку. Поскольку есть только 2 пустых значения Embarked, я также бросаю пассажиров, у которых нет информации о порте посадки.

Мы также должны иметь дело с отсутствующими возрастными ценностями. Я решаю вменять недостающий возраст средним возрастом соответствующего Pclass каждого человека. Итак, если Джо Смит был в Pclass 1, а мы не знаем его возраста, его возраст рассчитывается как среднее значение для всех людей, которые проживали в Pclass 1.

Следующий шаг - решить, какие функции использовать для прогнозирования «выживаемости». Я делаю выбор функций простым. Реально этот шаг должен быть долгим и кропотливым. На данный момент я использую следующие функции:

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

Теперь мы подошли к сути этого поста. Цель оставшейся части поста - подробно изучить API для обучения Sci-kit с использованием различных моделей классификации. Ниже я импортирую три модели классификации, которые использую в этом упражнении.

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

Затем модель соответствует обучающим данным и оценивается с помощью тестовых данных. Я выкладываю шаги в код ниже:

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

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

Точность улучшилась на 1% после нашего рандомизированного алгоритма поиска.

Затем я использую классификацию K-ближайших соседей для нашего набора данных.

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

Опять же, точность значительно улучшилась по сравнению с моделью KNeighborsClassifier по умолчанию. Алгоритм RandomSearch выбрал наиболее эффективный набор найденных гиперпараметров. Затем я применил их к набору для тестирования. Это привело к увеличению производительности почти на 3%.

Наконец, я использую классификатор дерева решений.

Обратите внимание, что я использовал одни и те же первые четыре шага для каждого из трех классификаторов. Под капотом модели используют совершенно разные алгоритмы, но API все тот же! Это то, что упрощает использование библиотеки Sci-kit learn.

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

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