АвторДжен Ненг Нг

Эта история является продолжением серии:

Часть 1: Фоновое исследование

Часть 2: Анализ данных

Часть 3: Реализация

Часть 4: Реализация (продолжение)

Часть 3. Реализация

Разделение данных

В результате разделения данных был создан набор данных поезда из 146 590 строк и набор тестовых данных из 36 506 строк.

Очистка данных

Используйте коробочную диаграмму, чтобы обрезать выброс:

Выборка данных

Мы можем проверить соотношение каждого класса в Damage_grade:

Давайте воспользуемся библиотекой SmoteClass для повышения частоты дискретизации для класса дисбаланса:

После повышения частоты дискретизации каждый класс должен быть сбалансирован:

Преобразование данных и масштабирование

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

План эксперимента

Основываясь на предыдущем анализе связанной работы (Часть 1), мы можем выбрать как минимум три модели машинного обучения для эксперимента. Лучше всего сравнивать XGBoost, Random Forest и Decision Tree в учебных целях. Сравнение этих трех древовидных моделей дает базовое представление о бэггинге и бустинге из одного варианта использования.

В этом плане эксперимента мы попытаемся выяснить, поможет ли класс дисбаланса с повышением дискретизации, удаление выбросов и преобразование PCA повысить точность прогнозирования набора данных или нет. Имейте в виду, что каждый набор данных (обучение/проверка/тест) имеет свое собственное распределение данных, и не каждая модель должна применять определенный процесс или процедуру.

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

Древо решений

Для реализации метода дерева решений будет использоваться пакет rpart, широко используемый пакет для моделирования дерева классификации и регрессии (CART).

Эксперимент 1

Зависимые переменные назначены в качестве фактора для классификации. Минимальное разделение здесь относится к минимальному количеству наблюдений, существующему в узле, необходимом для разделения. min Bucket означает минимальное количество наблюдений, требуемое в любом терминальном узле. Предусмотренное в модели значение minbucket=10 предназначено для того, чтобы избежать переобучения, когда это может помешать некоторым наблюдениям попытаться создать новое дерево по пути. Значение cp здесь относится к параметру сложности, он определяет общий размер дерева решений. Присвоив ему отрицательное значение, он, как правило, позволяет дереву полностью вырасти.

Результат нас удивил: всего за 197 секунд обучения он имеет результат точности 0,749. Выходные данные также показывают, что класс 2 имеет самый высокий уровень точности.

График выше показывает, что для модели достаточно дерева 2000.

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

Эксперимент 2 (настройка)

Теперь мы будем использовать поиск параметров из функции поезда каретки, чтобы найти оптимальный параметр. Внимательно изучите документ по настройке пакета Caret, пакет rpart поддерживает только cp (параметр сложности) в качестве цели настройки.

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

Мы можем выделить другие значения параметров из настроенной модели.

Давайте поместим результат параметра в новую модель:

Результат показывает, что точность ниже (-0,12), чем раньше. Возможно, значение cp не подходит для этого набора данных. На предыдущем графике параметра сложности он измеряет, что точность может достигать 0,66 выше с помощью перекрестной проверки набора обучающих данных. По сравнению с точностью тестового набора данных точность немного ниже (0,62). В общем, увеличение cp обеспечит большее обобщение тестового набора данных. Означает, что модель может быть более обобщенной и получать одинаковую точность для разных данных.

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

Возврат значения cp к -1 может привести к другому результату:

Оценка F1 аналогична модели эксперимента 1 (0,749). Несмотря на то, что параметры min split и min Bucket изменились на 20 и 7.

Случайный лес

Random Forest — это ансамблевая модель бэггинга. Обычно он строит множество деревьев решений параллельно со случайными подвыборками, затем прогнозирование модели будет вычислять наиболее частый класс в качестве ответа. Таким образом, случайный лес будет иметь более низкую дисперсию по сравнению с деревом решений, потому что дерево решений более чувствительно к конкретным данным, и строится только одно дерево решений. Более того, у случайного леса будет меньше проблем с переоснащением, даже если количество деревьев увеличится. Что касается реализации, в R есть два популярных пакета, которые можно использовать для модели случайного леса: пакет cForest и randomForest. В этих экспериментах будет использоваться randomForest, поскольку он работает быстрее по сравнению с cForest.

Эксперимент 3

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

Точность составляет 0,624, что довольно мало по сравнению с ядром дерева решений, особенно с предсказанием класса 1. Кроме того, это требует много времени обработки при обучении ядра.

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

Эксперимент 4 (настройка)

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

реализация будет случайным образом выбирать 5000 образцов и использовать метод «из коробки» для определения ошибки.

График выше показывает, что точность может значительно улучшиться, если mtry увеличивается. Лучшее оптимальное значение для mtry и ntree — 38 и 500.

Подберем оптимальный параметр для новой модели:

Оценка микро-F1 увеличилась на 0,05 по сравнению с экспериментом 3 (0,624). Полученная оценка тестирования 0,677 аналогична оценке проверки обучения (0,6928), что означает, что разница в наборе данных не влияет на производительность модели. С другой стороны, время обработки также увеличилось с 98 секунд до 2000 секунд по мере увеличения количества деревьев и количества попыток. Это довольно много по сравнению с моделью дерева решений.

XGBoost

Extreme Gradient Boosting (XGB) — популярная модель бустинга. Это ансамблевая модель повышения градиента, которая сочетает в себе методы мешков и повышения градиента. Обычно это помогает слабым ученикам, пытаясь уменьшить ошибку обучения. В R у него есть пакет XGBoost, поддерживающий реализацию модели.

Эксперимент 5

Существует несколько параметров модели для XGBoost, таких как eta (скорость обучения), max_depth, nround, subsample, colsample_bytree и гамма (min_split_loss). Это также указывает на то, что train-merror еще больше уменьшил ошибку после каждого раунда.

Оценка микро-F1 составляет 0,7494, что немного выше, чем у дерева решений и случайного леса, поскольку используется всего 147 секунд времени обучения. Кроме того, точность и специфичность модели прогнозирования класса 1 получают наивысший балл (0,676) по сравнению с другими моделями. Поскольку класс зависимой переменной 1 имеет меньше наблюдений по сравнению с двумя другими классами, заметно, что XGBoost улучшил точность класса слабого ученика.

Эксперимент 6 (Настройка)

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

Значение max_depth из результатов поиска по сетке очень низкое (max_depth=2). Судя по записи nround и точности на желтой схеме, можно предположить, что увеличение nrounds повысит точность.

Подгоним найденный оптимальный параметр к новой модели:

Это показывает, что точность снизилась по сравнению с экспериментом 5 (0,7497), это может быть связано с тем, что eta (скорость обучения) установлена ​​выше, а max_depth установлена ​​ниже по сравнению с предыдущим.

Таким образом, давайте откорректируем eta и max_depth и посмотрим на результаты:

После корректировки eta и max_depth до значения модели Эксперимента 5 показатель микро-F1 увеличился до 0,8775, что близко к тренировочному показателю 0,943 (train-merror: 0,0571). Документ Документация XGBoost также предупреждает пользователя о том, что увеличение значения max_depth сделает модель более сложной и простой для переобучения. Но в этой модели, кажется, не слишком много переобучения. Тем не менее, оценка для каждого перечисленного класса также указывает на то, что точная скорость хорошо сбалансирована в этой модели.

Заключение и резюме (Эксперимент 1~6)

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

Эксперименты 3 и 4 также доказывают, что случайный лес является наиболее стабильным ядром, результаты проверки и тестирования практически одинаковы. Однако случайный лес отнимал слишком много времени на обучение. Я попытался запустить случайный лес в Python с тем же набором данных, он немного повышает производительность по сравнению с R. В большинстве сценариев случайный лес может работать лучше, чем дерево решений. Поскольку я ограничил размер выборки в этом ядре, это уменьшило как точность, так и затраты времени.

Что касается XGBoost, то он получает наивысшую оценку предсказания класса 1 по сравнению с двумя другими ядрами. Стоит отметить, что он значительно улучшил предсказание слабого ученика.

›› Следующий раздел