Мануэль Сайнс де ла Пенья
Во второй статье я расскажу об одной из моих любимых моделей машинного обучения: Random Forest. Прежде чем идти дальше, я хочу отдать должное Генеральной Ассамблее и их уроку по этой теме, написанному Мэттом Бремсом, Райли Даллас и Патриком Уэльс-Динаном, за предоставление большей части содержания, которое я буду обсуждать.
Модели случайного леса — это попытка решить одну из основных проблем с моделями дерева решений в пакетах, а именно их склонность к переоснащению и высокой дисперсии. Это связано с тем, что все деревья в мешках сильно коррелируют друг с другом. Высокая корреляция между деревьями приводит к тому, что модель может быть настолько же подогнана, как и отдельное дерево решений. Как модели Random Forest решают эту проблему? Они пытаются «декоррелировать» отдельные деревья в случайном лесу. Это достигается за счет использования случайного подмножества признаков в каждом отдельном дереве модели.
Для целей этого блога я буду использовать обучающий набор данных Kaggle Titanic (https://www.kaggle.com/c/titanic/data). Дополнительную информацию об этих данных (включая словарь данных) можно найти на веб-сайте, на который есть ссылка. Я не буду показывать свои шаги по очистке и исследованию данных, но кратко подытожу, как я разработал свою модель.
- Колонка «Отправлено» была фиктивной.
- Столбец «FamilyCount» был создан для суммирования значений братьев и сестер, супругов, родителей и детей для каждого пассажира.
- Столбец «Преподобный» был создан для возврата 1, если пассажир был преподобным, и 0, если нет.
- Столбец IsMale был создан для возврата 1, если пассажир был мужчиной, и 0, если нет.
Мой окончательный список функций модели показан ниже:
Перед созданием нашей модели важно определить базовый показатель точности, который мы намерены превзойти. Базовая точность представляет собой процент данных, найденных в большинстве, для классификации, которую мы пытаемся предсказать с помощью нашей модели. Для нас это оказался процент пассажиров, которые не выжили во время путешествия Титаника. Ниже показано, как найти этот балл:
Отметив базовую точность, мы можем разделить наши данные на наборы для обучения и тестирования, используя функцию Scikit-learn «train_test_split», показанную ниже:
Далее нам нужно создать экземпляр нашей модели классификатора случайного леса:
После этого шага полезно настроить основу GridSearch для просмотра словаря гиперпараметров и определения нашей наиболее эффективной модели.
Приведенный выше код дает нам фрейм данных в качестве выходных данных, который обновляется каждый раз, когда мы повторно запускаем наш GridSearch (нижняя ячейка) с гиперпараметрами, которые дали нам нашу наиболее эффективную модель случайного леса. См. ниже нашу самую эффективную модель:
Затем мы можем создать новый экземпляр Random Forest Classifier с оптимальными гиперпараметрами, которые мы определили с помощью GridSearch. После подгонки модели к нашим обучающим данным мы оценили ее с помощью наших данных тестирования. Эта модель в конечном итоге имела показатель точности тестирования 83,86% (показано ниже).
Теперь мы успешно создали модель классификации случайного леса! Эта модель правильно предскажет, выжил ли пассажир во время злополучного первого рейса «Титаника» примерно в 84% случаев. Мы добились улучшения примерно на 22% по сравнению с базовым уровнем, не тратя много времени на продвинутые стратегии вменения данных или разработку признаков. Важно отметить, что наша модель случайного леса избежала значительного переобучения.
Стратегии дальнейшего улучшения этой модели включают:
- Более продвинутые стратегии вменения данных для нулевых значений
- Инженерные дополнительные функции
- Удалите неэффективные функции
- Добавьте дополнительные гиперпараметры в наш словарь параметров GridSearch.
Спасибо за прочтение и удачного моделирования!