Прогнозирование выживших на Титанике с помощью модели классификатора случайного леса

Мануэль Сайнс де ла Пенья

Во второй статье я расскажу об одной из моих любимых моделей машинного обучения: Random Forest. Прежде чем идти дальше, я хочу отдать должное Генеральной Ассамблее и их уроку по этой теме, написанному Мэттом Бремсом, Райли Даллас и Патриком Уэльс-Динаном, за предоставление большей части содержания, которое я буду обсуждать.

Модели случайного леса — это попытка решить одну из основных проблем с моделями дерева решений в пакетах, а именно их склонность к переоснащению и высокой дисперсии. Это связано с тем, что все деревья в мешках сильно коррелируют друг с другом. Высокая корреляция между деревьями приводит к тому, что модель может быть настолько же подогнана, как и отдельное дерево решений. Как модели Random Forest решают эту проблему? Они пытаются «декоррелировать» отдельные деревья в случайном лесу. Это достигается за счет использования случайного подмножества признаков в каждом отдельном дереве модели.

Для целей этого блога я буду использовать обучающий набор данных Kaggle Titanic (https://www.kaggle.com/c/titanic/data). Дополнительную информацию об этих данных (включая словарь данных) можно найти на веб-сайте, на который есть ссылка. Я не буду показывать свои шаги по очистке и исследованию данных, но кратко подытожу, как я разработал свою модель.

  1. Колонка «Отправлено» была фиктивной.
  2. Столбец «FamilyCount» был создан для суммирования значений братьев и сестер, супругов, родителей и детей для каждого пассажира.
  3. Столбец «Преподобный» был создан для возврата 1, если пассажир был преподобным, и 0, если нет.
  4. Столбец IsMale был создан для возврата 1, если пассажир был мужчиной, и 0, если нет.

Мой окончательный список функций модели показан ниже:

Перед созданием нашей модели важно определить базовый показатель точности, который мы намерены превзойти. Базовая точность представляет собой процент данных, найденных в большинстве, для классификации, которую мы пытаемся предсказать с помощью нашей модели. Для нас это оказался процент пассажиров, которые не выжили во время путешествия Титаника. Ниже показано, как найти этот балл:

См. также:  Вы должны узнать, что реально, а что подделано!

Отметив базовую точность, мы можем разделить наши данные на наборы для обучения и тестирования, используя функцию Scikit-learn «train_test_split», показанную ниже:

Далее нам нужно создать экземпляр нашей модели классификатора случайного леса:

После этого шага полезно настроить основу GridSearch для просмотра словаря гиперпараметров и определения нашей наиболее эффективной модели.

Приведенный выше код дает нам фрейм данных в качестве выходных данных, который обновляется каждый раз, когда мы повторно запускаем наш GridSearch (нижняя ячейка) с гиперпараметрами, которые дали нам нашу наиболее эффективную модель случайного леса. См. ниже нашу самую эффективную модель:

Затем мы можем создать новый экземпляр Random Forest Classifier с оптимальными гиперпараметрами, которые мы определили с помощью GridSearch. После подгонки модели к нашим обучающим данным мы оценили ее с помощью наших данных тестирования. Эта модель в конечном итоге имела показатель точности тестирования 83,86% (показано ниже).

Теперь мы успешно создали модель классификации случайного леса! Эта модель правильно предскажет, выжил ли пассажир во время злополучного первого рейса «Титаника» примерно в 84% случаев. Мы добились улучшения примерно на 22% по сравнению с базовым уровнем, не тратя много времени на продвинутые стратегии вменения данных или разработку признаков. Важно отметить, что наша модель случайного леса избежала значительного переобучения.

Стратегии дальнейшего улучшения этой модели включают:

  • Более продвинутые стратегии вменения данных для нулевых значений
  • Инженерные дополнительные функции
  • Удалите неэффективные функции
  • Добавьте дополнительные гиперпараметры в наш словарь параметров GridSearch.

Спасибо за прочтение и удачного моделирования!

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: