🤖 Машинное обучение для начинающих: алгоритм случайного леса (Random Forest)
В отличие от большинства используемых в машинном обучении методов, алгоритм случайного леса не требует сложной теории. В небольшом обзоре рассказываем про его особенности и возможности применения. Алгоритм случайного леса (Random Forest) — универсальный алгоритм машинного обучения, суть которого состоит в использовании ансамбля решающих деревьев. Само по себе решающее дерево предоставляет крайне невысокое качество классификации, но из-за большого их количества результат значительно улучшается. Также это один из немногих алгоритмов, который можно использовать в абсолютном большинстве задач. Благодаря своей гибкости Random Forest применяется для решения практически любых проблем в области машинного обучения. Сюда относятся классификации (RandomForestClassifier) и регрессии (RandomForestRegressor), а также более сложные задачи, вроде отбора признаков, поиска выбросов/аномалий и кластеризации. Основным полем для применения алгоритма случайного дерева являются первые два пункта, решение других задач строится уже на их основе. Так, для задачи отбора признаков мы осуществляем следующий код: Здесь мы на основе классификации просто добавляем метод для отбора признаков. По сравнению с другими методами машинного обучения, теоретическая часть алгоритма Random Forest проста. У нас нет большого объема теории, необходима только формула итогового классификатора Где Стоит также отметить, что для задачи классификации мы выбираем решение голосованием по большинству, а в задаче регрессии – средним. Реализуем алгоритм на простом примере для задачи классификации, используя библиотеку scikit-learn: Работаем с алгоритмом по стандартному порядку действий, принятому в scikit-learn. Вычисляем Чем больше деревьев, тем лучше качество. Стоит отметить, что время настройки и работы Random Forest будут пропорционально увеличиваться, что может сказаться на производительности. Часто при большом увеличении Также один из самых важных параметров для построения, но без значительной возможности выбора. В библиотеке sklearn для задач классификации реализованы критерии В свою очередь, для задач регрессии реализованы два критерия ( Простой метод перебора поможет выбрать, что использовать для решения конкретной проблемы. При увеличении Является одним из самых важных параметров в алгоритме. Он настраивается в первую очередь, после того, как мы определили тип нашей задачи. Второстепенный по своему значению параметр, его можно оставить в состоянии по умолчанию. Аналогично с Чем меньше максимальная глубина, тем быстрее строится и работает алгоритм случайного дерева. При увеличении глубины резко возрастает качество как на обучении модели, так и на ее тестировании. Если у вас есть возможность и время для построения глубоких деревьев, то рекомендуется использовать максимальное значение данного параметра. Неглубокие деревья рекомендуется использовать в задачах со значительным количеством шумовых объектов (выбросов). Метод случайного дерева (Random Forest) – это универсальный алгоритм машинного обучения с учителем. Его можно использовать во множестве задач, но в основном он применяется в проблемах классификации и регрессии. Действенный и простой в понимании, алгоритм имеет значительный недостаток – заметное замедление работы при определенной настройке параметров внутри него. Вы можете использовать случайный лес, если вам нужны чрезвычайно точные результаты или у вас есть огромный объем данных для обработки, и вам нужен достаточно сильный алгоритм, который позволит вам эффективно обработать все данные. Дополнительные материалы:В каких задачах используется?
import pandas as pd from sklearn.ensemble import RandomForestClassfier from sklearn.feature_selection import SelectFromModel X_train,y_train,X_test,y_test = train_test_split(data,test_size=0.3) sel = SelectFromModel(RandomForestClassifier(n_estimators = 100)) sel.fit(X_train, y_train)
Порядок действий в алгоритме
Теоретическая составляющая алгоритма случайного дерева
a(x)
:Реализация алгоритма Random Forest
class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_split=1e-07, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
AUC-ROC
(площадь под кривой ошибок) для тренировочной и тестовой частей модели, чтобы определить ее качество:
from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import roc_auc_score # далее - (X, y) - для обучения, (X2, y2) - для контроля # модель - регрессор model = RandomForestRegressor(n_estimators=10, oob_score=True, random_state=1) model.fit(X, y) # обучение a = model.predict(X2) # предсказание print ("AUC-ROC (oob) = ", roc_auc_score(y, model.oob_prediction_)) print ("AUC-ROC (test) = ", roc_auc_score(y2, a))
Необходимые параметры алгоритма
Число деревьев – n_estimators
n_estimators
качество на обучающей выборке может даже доходить до 100%, в то время как качество на тесте выходит на асимптоту, что сигнализирует о переобучении нашей модели. Лучший способ избежать этого – прикинуть, сколько деревьев вам достаточно, зафиксировав момент, когда качество теста еще не становится стабильно-неизменным.Критерий расщепления – criterion
gini
и entropy
. Они соответствуют классическим критериям расщепления: джини и энтропии. mse
и mae
), которые являются функциями ошибок Mean Square Error и Mean Absolute Error соответственно. Практически во всех задачах используется критерий mse
. Число признаков для выбора расщепления – max_features
max_features
увеличивается время построения леса, а деревья становятся похожими друг на друга. В задачах классификации он по умолчанию равен sqrt(n)
, в задачах регрессии – n/3
. Минимальное число объектов для расщепления – min_samples_split
Ограничение числа объектов в листьях – min_samples_leaf
min_samples_split
, но при увеличении данного параметра качество модели на обучении падает, в то время как время построения модели сокращается.Максимальная глубина деревьев – max_depth
Преимущества алгоритма
Недостатки алгоритма
Заключение
- 5 views
- 0 Comment
Свежие комментарии