Примечание редактора: в прошлой статье мы представилиОсновы деревьев решений, и демонстрирует построение, разбиение и обрезку деревьев решений с некоторыми примерами и расчетами. Теперь, имея «одно дерево», мы можем посадить «лес» и использовать метод таксономической комбинации, чтобы выбрать наиболее эффективные деревья.
Четвертая часть серии «Обучение с нуля» «Подробное объяснение древовидного моделирования машинного обучения (R & Python) — Random Forest» подготовлена группой контента Analytics Vidhya, известного индийского веб-сайта по науке о данных.
содержание
-
Ансамбльный подход к моделям деревьев
-
что такое упаковка
-
Что такое случайный лес
-
Что такое бустинг
-
GBM VS XGboost
-
Использование GBM с R и Python
-
Упражнения (регрессия, классификация)
Примечание. Поскольку реализация XGboost слишком длинная, она будет представлена в отдельной главе.
Ансамбльный подход к моделям деревьев
Ансамблевое обучение — очень популярный метод обучения.Обучая несколько слабых учеников и комбинируя их, мы можем получить сильного ученика со значительно улучшенной точностью и стабильностью. Слово «интеграция» само по себе содержит значение «группы», и его также можно использовать в древовидных моделях.
Как и другие модели, модели с древовидной структурой также подвержены смещению и дисперсии. Смещение относится к среднему отклонению теоретических прогнозов от фактических значений, а дисперсия относится к тому, насколько разными будут прогнозы модели, когда ее входными данными являются разные выборки из одной и той же совокупности.
Если вы построите дерево решений, вы получите модель с низкой дисперсией и высоким смещением, так как же сбалансировать отношения между ними? Как правило, по мере того, как модель становится более сложной, смещение модели будет меньше, а ошибка прогнозируемого значения будет меньше. На этом этапе, если вы еще больше усложните его, вы получите модель переобучения с высокой дисперсией.
Поэтому наилучшей практикой является поддержание баланса между смещением и дисперсией, то есть компромисс между смещением и дисперсией (компромисс между смещением и дисперсией). Ансамблевое обучение — распространенный способ формального выполнения этого анализа компромиссов.
Как упоминалось ранее, основная идея ансамблевого обучения состоит в объединении нескольких отдельных обучаемых. На практике они могут быть одинаковыми или разными, но первые используются чаще. Дерево решений CART является одной из наиболее часто используемых моделей для ансамблевого обучения.Поскольку в этой статье представлена модель, основанная на древовидной структуре, последняя включает метод ансамблевого обучения однородных отдельных учащихся, представленных древовидными моделями.Они включают в себя бэггинг, бустинг.
что такое упаковка
Бэггинг — это метод уменьшения дисперсии. Он сначала делит исходный набор данных на несколько поднаборов данных, а затем независимо параллельно обучает слабых учеников на них. Эти ученики реорганизуются с помощью стратегии ансамбля, и, наконец, получается сильный ученик. Конкретный процесс показан на следующем рисунке:
Шаг 1. Создайте несколько поднаборов данных D на основе исходного обучающего набора D.1, Д2... Дt-1, Дt
-
Выборка здесь заменена.После того, как набор подданных возьмет образцы из обучающего набора, эти образцы будут возвращены в обучающий набор для участия в следующем раунде выборки, поэтому мы можем получить несколько идентичных наборов подданных;
-
Эти новые поднаборы данных могут иметь некоторые оценки для строк и столбцов, которые часто являются гиперпараметрами в моделях упаковки;
-
Если оценки в строках и столбцах меньше 1, они помогут создать сильного ученика, менее склонного к переоснащению.
шаг 2: Создайте несколько учеников (классификаторов)
-
Поднабор данных соответствует учащемуся;
-
Как правило, все эти учащиеся используют одну и ту же модель.
шаг 3: Объедините классификаторы
-
Комбинируйте прогнозы отдельных учащихся со средним значением, медианой или модой в зависимости от проблемы;
-
Комбинированные значения обычно более надежны, чем любые прогнозы учащегося.
Обратите внимание, что количество учащихся здесь не является гиперпараметром. Хотя большее количество моделей во многих случаях лучше, это также приводит к более похожим, менее эффективным прогнозам. Из теоретических рассуждений о бэггинге мы можем обнаружить, что в некоторых задачах дисперсия новых предсказаний, полученных с помощью бэггинга, часто составляет 1/n исходной дисперсии (n — количество классификаторов).
Существует несколько реализаций модели бэггинга, расширенной версией которой является случайный лес.
Что такое случайный лес
Случайный лес — это панацея от всех проблем науки о данных, и это всегда правильный выбор, когда вы не знаете, как решить (любую) проблему. Это комплексный алгоритм, который может не только решать задачи классификации и регрессии, но также работать с пропущенными значениями и выбросами за счет уменьшения размерности Он может выполнять почти все основные операции, необходимые для науки о данных, и работает хорошо.
Принцип случайного леса
В случайных лесах мы больше не строим только одну модель CART, а «сажаем» несколько деревьев. Для задач классификации каждое дерево решений будет давать предсказанную классификацию, что эквивалентно «голосованию» за эту категорию, и, наконец, лес выберет категорию с наибольшим «голосами»; для задач регрессии мы обычно берем предсказанное значение все деревья среднее значение.
Этапы его сборки следующие:
-
Пусть входных выборок будет N, и случайным образом выберите N наборов подданных из обучающего набора с заменой;
-
Если есть M признаковых переменных, выберите m≤M, возьмите наилучшее разделение в m в качестве узла разделения и постройте дерево решений для выборочных данных;
-
Каждое дерево решений должно быть полностью разделено и не может быть сокращено (случайная выборка, без переобучения);
-
Объедините прогнозы дерева решений для получения новых данных.
Преимущества случайных лесов
Случайный лес имеет 6 основных преимуществ:
-
Может одновременно решать задачи классификации и регрессии и давать высококачественные прогнозы;
-
Может обрабатывать многомерные большие данные. Случайный лес может отфильтровывать наиболее важные функции из тысяч функций и использовать это для уменьшения размерности (случайный выбор, без выбора функций). На некоторых случайных наборах данных эта модель, зависящая от переменных, работает хорошо;
-
Предоставляет эффективный метод расчета недостающих данных и может гарантировать точность большинства расчетов;
-
Может обрабатывать несбалансированные наборы данных и балансировать ошибки;
-
Вышеупомянутые функции могут быть расширены на немаркированные данные, обеспечивая неконтролируемую кластеризацию, создание представлений данных и обнаружение выбросов;
-
Метод выборки случайного леса называется выборкой Bootstap, для которой не требуется тестовый набор. Теперь, если мы возьмем 1/N данных в качестве тестового набора, они представляют собой образцы из пакета, а содержащиеся в них ошибки называются ошибками из пакета. Изучая ошибку случайных выборок, мы можем видеть, что если тестовый набор имеет тот же размер, что и обучающий набор, они будут давать такое же значение прогноза. Таким образом, использование этого метода выборки не требует отдельного набора тестов.
Недостатки случайных лесов
-
По сравнению с задачами классификации случайные леса более эффективно решают задачи регрессии. Однако, поскольку проблема регрессии представляет собой непрерывное прогнозирование, алгоритм не будет выходить за пределы обучающих данных, поэтому модель будет соответствовать зашумленным данным;
-
Для разработчиков случайный лес больше похож на черный ящик, потому что его эффекты не поддаются контролю.
Реализация на Python и R
У случайных лесов есть готовые инструменты как на языке Python, так и на языке R.
-
Python
#导入Library
from sklearn.ensemble import RandomForestClassifier #用随机森林解决回归问题
#假设你有一个关于训练集的预测模型X和目标值y,以及一个测试集的预测模型x_test
# 创建随机森林对象
model= RandomForestClassifier(n_estimators=1000)
# 用训练集训练模型并验证得分
model.fit(X, y)
#预测输出
predicted= model.predict(x_test)
скопировать код
-
язык R
> library(randomForest)
> x <- cbind(x_train,y_train)
# Fitting model
> fit <- randomForest(Species ~ ., x,ntree=500)
> summary(fit)
#Predict Output
> predicted= predict(fit,x_test)
скопировать код
Что такое бустинг
Повышение — это алгоритм, который превращает слабых учеников в сильных учеников.
Чтобы объяснить это проще и нагляднее, возьмем пример идентификации спама.
Я полагаю, что многие разработчики столкнулись с этой проблемой, когда учились: как классифицировать электронные письма как спам? Как и другие, для многих предпочтительной практикой может быть установка некоторых оценочных ярлыков:
-
Если в письме только один файл изображения (рекламный постер), это спам;
-
Если в письме только одна ссылка, это спам;
-
Если в теле письма содержится фраза «Вы выиграли приз за…», это спам;
-
Если суффикс источника электронной почты «jqr.com», это означает, что Lunzhijun прислал вам новогодний товар, а не спам;
-
Если источником электронной почты является «Контакт XXX», это не спам.
Здесь мы перечислили 5 правил классификации почты, но они далеки от успешной классификации.
Правило, которое может классифицировать некоторые электронные письма, но не все электронные письма, подобные этому, называется слабым учеником. Чтобы превратить их в более сильных учеников, им нужно «объединиться как одно целое»:
-
среднее/средневзвешенное значение;
-
Предсказанная категория имеет более высокие «голоса».
Например, в этом сценарии мы определяем 5 слабых учеников, 3 из которых оценивают одно и то же электронное письмо как «спам» и 2 как «не спам», затем по умолчанию мы классифицируем его как спам, потому что оно имеет больше «голосов».
Принцип повышения
Теперь, когда мы знаем, что Boosting опирается на слабых учеников для создания сильных правил, как он выявляет слабых учеников?
Чтобы найти слабого ученика (также называемого «базовым учеником», соответствующий алгоритм обучения является «базовым алгоритмом обучения»), нам нужно применить «базовый алгоритм обучения» к различным распределениям. Каждый раз, когда используется «базовый алгоритм обучения», создается новое правило слабого прогнозирования. Это итеративный процесс.После многих итераций мы, наконец, получаем кучу слабых правил прогнозирования с разной производительностью, а затем используем алгоритм повышения, чтобы объединить их в сильное правило прогнозирования.
Так как же выбрать правильный дистрибутив для каждой итерации? Вот конкретные шаги:
-
Слабые ученики берут все распределения и присваивают каждому наблюдению одинаковый вес;
-
Если первый базовый алгоритм обучения вычисляет ошибку обучения, увеличить веса соответствующих наблюдений, чтобы следующий слабый классификатор мог «уделить им больше внимания»;
-
Повторяйте шаг 2, пока алгоритм не достигнет своего предела или не получит более высокую точность.
Наконец, эти слабые учащиеся будут объединены в сильного учащегося под действием алгоритма улучшения.Поскольку каждый раунд итерации «сосредотачивается» на неправильно классифицированных данных, слабые правила улучшаются во время обучения, поэтому точность прогнозирования сильного учащегося составляет Значительное улучшение по сравнению с предыдущим. Существует много видов алгоритмов повышения для комбинированных учащихся, таких как алгоритм AdaBoost и алгоритмы повышающего ряда деревьев.Следующие разделы посвящены повышению градиента (GBM) и XGboost, которые относятся к алгоритмам повышающего ряда деревьев.
GBM VS XGboost
Полное название GBM — Gradient Boosting Machine, разновидность алгоритма повышения. Его основная идея состоит в том, чтобы установить новый базовый ученик на основе направления градиентного спуска функции потерь ранее установленного базового ученика.
XGboost также возник из алгоритма бустинга, но он представил некоторые идеи группового обучения бэггинга на основе вычисления функции потерь. Это улучшает способность алгоритма решать общие проблемы, настраивая функцию потерь среды Gradient Boosting и добавляя больше контролируемых параметров.
В практических приложениях мы обычно обнаруживаем, что XGboost имеет лучшую производительность и более высокую точность, чем GBM.
-
Регуляризация: GBM не будет выполнять регуляризацию, а XGboost добавит сложность модели дерева в качестве регулярного члена к цели оптимизации, что может лучше предотвратить переоснащение;
-
Параллельные вычисления: по сравнению с GBM, XGboost использует более быстрые параллельные вычисления;
-
Высокая гибкость: XGboost добавляет множество контролируемых параметров, которые позволяют разработчикам определять собственные цели оптимизации и критерии оценки, что эквивалентно добавлению в модель совершенно нового измерения;
-
Обработка отсутствующих значений: XGBoost имеет встроенную процедуру для обработки отсутствующих данных, разработчик должен предоставить значение, отличное от других наблюдений, и передать его в качестве параметра. А с обнаружением отсутствующих значений узла XGBoost может расширить текущий метод поиска пути на будущее;
-
Сокращение: когда алгоритм GBM используется для сокращения, он прекращает разделение непосредственно, когда прирост информации об узле отрицательный, поэтому это жадный алгоритм; в то время как XGBoost сначала позволит дереву CART вырасти до max_depth (максимальная глубина), а затем Затем обрежьте разделение отрицательного усиления снизу вверх. В это время он рассчитает сумму прироста информации дочернего узла и родительского узла. Если родительский узел равен -2, а дочерний узел равен +10, то XGBoost сохранит его, видение более долгосрочное.
-
Встроенная перекрестная проверка: XGBoost позволяет разработчикам выполнять перекрестную проверку на каждой итерации процесса повышения, что облегчает подсчет количества итераций на итерацию, в то время как GBM полагается на поиск по сетке, который может проверять только ограниченные значения;
-
Продолжайте использовать текущую модель: XGBoost позволяет разработчикам обучаться сразу после итерации модели, что в некоторых сценариях имеет очевидные преимущества. Реализация sklearn GBM теперь также поддерживает эту функцию.
Использование GBM с R и Python
Прежде чем мы официально приступим к кодированию, давайте взглянем на важные параметры алгоритма GBM и их функции.Ниже приведен псевдокод алгоритма:
1.初始化结果
2.从1到1的树总数
2.1根据以前的运行更新目标的权重(错误分类的权重更高)
2.2在选定的数据子样本上拟合模型
2.3对全套观察数据进行预测
2.4依据学习率,用当前结果更新输出
3.返回最终输出。
скопировать код
Параметры GBM в Python для повышения производительности модели
-
learning_rate
Скорость обучения, определяющая вклад каждого дерева в конечный результат. В общем, мы определяем более низкую скорость обучения, потому что они делают модель устойчивой к конкретным функциям дерева и, таким образом, улучшают обобщение. Но более низкая скорость обучения также потребует больше деревьев и потребует больших вычислительных ресурсов.
-
n_estimators
Количество деревьев для моделирования (количество базовых учеников). Хотя GBM хорошо работает с большим количеством деревьев, он все же может переобучать, и мы можем использовать перекрестную проверку для настройки скорости обучения.
-
subsample
Количество подвыборок путем случайной выборки подмножества наблюдений из каждого дерева. Обычно он меньше 1, что может уменьшить дисперсию и повысить надежность модели.Оптимальное значение может быть выбрано равным 0,8, но правильная настройка позволит получить лучшую модель.
-
loss
Функция потерь, минимизируемая каждым разбиением, имеет разные варианты в зависимости от задач классификации и регрессии, и по умолчанию потеря не является обязательной. Выберите другое, только если функция потерь влияет на модель.
-
init
Переменные модели, т.е. исходная модель для GBM.
-
random_state
Семя случайного числа. Различные семена приведут к разным результатам случайной выборки, одни и те же результаты выборки семян будут одинаковыми. Это важно для настройки параметров.
-
verbose
Печатать ли процесс обучения модели: 0 — не печатать; 1 — печатать в соответствии с временным интервалом; > 1 — печатать результаты обучения всех деревьев.
-
warm_start
Теплый старт, следует ли вызывать результаты модели последней подгонки и добавлять новые результаты. При перезапуске прерванной тренировки этот параметр позволяет продолжить тренировку с последнего раза.
-
presort
Следует ли предварительно разделить данные.
Выше приведены лишь некоторые параметры. Для получения дополнительной информации перейдите на Github: https://github.com/aarshayj/Analytics_Vidhya/tree/master/Articles/Parameter_Tuning_GBM_with_Example.
Параметры GBM для улучшения производительности модели на языке R
Используя пакет Caret, разработчикам R нужно настроить только следующие основные параметры:
-
n.trees: количество итераций;
-
interaction.depth: глубина дерева решений;
-
сокращение: скорость обучения;
-
n.minobsinnode: минимальное количество обучающих выборок, необходимое для разделения узлов.
GBM в R (с перекрестной проверкой)
> library(caret)
> fitControl <- trainControl(method = "cv",
number = 10, #5folds)
> tune_Grid <- expand.grid(interaction.depth = 2,
n.trees = 500,
shrinkage = 0.1,
n.minobsinnode = 10)
> set.seed(825)
> fit <- train(y_train ~ ., data = train,
method = "gbm",
trControl = fitControl,
verbose = FALSE,
tuneGrid = gbmGrid)
> predicted= predict(fit,test,type= "prob")[,2]
скопировать код
ГБМ в Python
#导入libraries
from sklearn.ensemble import GradientBoostingClassifier #分类问题
from sklearn.ensemble import GradientBoostingRegressor #回归问题
#使用GBM算法
clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1)
clf.fit(X_train, y_train)
скопировать код
Учитывая объем этой статьи, Лунжи напишет отдельный учебник по реализации XGBoost на R и Python, так что следите за обновлениями!
Упражнения (регрессия, классификация)
Практика — лучший способ проверить эффект от обучения Теперь, я считаю, что многие читатели усвоили важные знания о построении модели дерева, и пришло время для практических занятий.
Лунжи предлагает здесь один вопрос для классификации и регрессии, и заинтересованные читатели могут пойти и попробовать его.
Регрессия: прогноз продаж гипермаркетов(https://data hack.analytics vi.com/contest/practice-problem-big Mart-sales-prediction/)
Рубрика: Прогноз кредита(https://data hack.analytics vi.com/contest/practice-problem-loan-prediction/)
Исходный адрес: www.analyticsvidhya.com/blog/2016/04/complete-tutorial-tree-based-modeling-scratch-in-python/#eleven