Случайный лес - Как справиться с перегрузкой

41

У меня есть опыт работы в области компьютерных наук, но я пытаюсь научить себя науке данных, решая проблемы в Интернете.

Я работал над этой проблемой последние пару недель (около 900 строк и 10 функций). Сначала я использовал логистическую регрессию, но теперь я переключился на случайные леса. Когда я запускаю свою модель случайного леса на моих тренировочных данных, я получаю действительно высокие значения auc (> 99%). Однако, когда я запускаю ту же модель на тестовых данных, результаты не так хороши (точность около 77%). Это заставляет меня поверить, что я переоцениваю данные тренировок.

Каковы наилучшие методы предотвращения чрезмерной подгонки в случайных лесах?

Я использую r и rstudio в качестве среды разработки. Я использую randomForestпакет и принял значения по умолчанию для всех параметров

Аби
источник
4
Брейман утверждает, что РФ не одевается. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm Исходя из предположения, что он прав, возможно, существует какое-то несоответствие между вашей тренировкой и тестовым набором?
Sycorax говорит восстановить Монику
RF делает ИЗБЕГАЮЩИЕ не подходит для ИСПЫТАТЕЛЬНЫХ ДАННЫХ, если вы оптимизируете параметр настройки
Brash Equilibrium
Я считаю, что SPSSize полностью игнорирует параметр настройки. stackoverflow.com/questions/34997134/…
Сорен Хавелунд Веллинг

Ответы:

30

Чтобы избежать чрезмерной подгонки в случайном лесу, главное, что вам нужно сделать, - это оптимизировать параметр настройки, который управляет количеством функций, которые выбираются случайным образом, чтобы вырастить каждое дерево из данных начальной загрузки. Как правило, вы делаете это через перекрестную проверку в кратном порядке, где k { 5 , 10 } , и выбираете параметр настройки, который минимизирует ошибку прогнозирования тестовой выборки. Кроме того, выращивание более крупного леса улучшит прогнозирующую точность, хотя, как правило, доходность уменьшается до нескольких сотен деревьев.kk{5,10}

Brash Equilibrium
источник
1
Спасибо. Есть ли учебник, который показывает, как оптимизировать эти параметры?
Абхи
Вам нужно будет зарегистрироваться на онлайн-курсы Стэнфорда, что довольно просто, но вот видеоурок для этого в R: class.stanford.edu/courses/HumanitiesScience/StatLearning/…
Brash Equilibrium
Если я правильно понимаю это, мы используем перекрестную проверку для определения количества объектов, которые входят в модель случайного леса, а не количества объектов, которые модель будет пробовать на каждом этапе. Правильный ?
Абхи
4
Я бы поспорил с этим ответом: две из привлекательных особенностей RF заключаются в том, что их сложно переопределить, а параметры по умолчанию обычно довольно хороши. Этот ответ, по-видимому, подразумевает, что РФ чувствительны к значениям по умолчанию, что редко бывает
Чарльз
7
Эмпирически, мне вообще не было трудно перебирать случайный лес, управляемый случайный лес, упорядоченный случайный лес или управляемый упорядоченный случайный лес. Они регулярно очень хорошо справляются с перекрестной проверкой, но плохо при использовании с новыми данными из-за чрезмерной подгонки. Я считаю, что это связано с типом моделируемых явлений. Это не большая проблема при моделировании механического процесса, но с чем-то вроде поведенческой модели я получаю гораздо более стабильные результаты с четко определенной регрессией.
Hack-R
33

Как вы получаете 99% AUC от ваших тренировочных данных? Имейте в виду, что есть разница между

predict(model)

а также

predict(model, newdata=train)

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

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

Хонг Оои
источник
3
Я использовал прогнозирование (модель, данные = поезд). Теперь я переключился на прогнозирование (модель), и мой аук упал до 87%. Это хорошо или плохо?
Абхи
2
Спасибо! Я обнаружил, что это проблема для меня. Я разместил дополнительный вопрос о том, какую меру использовать в качестве «ошибки обучения» для моделей RF здесь: stats.stackexchange.com/questions/162353/…
Berk U.
Отлично, спасибо!! Я тоже делал эту ошибку! Для @Abhi: это хорошо, потому что предыдущий AUC был бессмысленно высоким. Этот более реалистичный. Попробуйте провести перекрестную проверку и измерить AUC, и вы, вероятно, увидите аналогичное значение.
любопытно
7

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

То же самое относится к лесу деревьев - не выращивайте их слишком много и обрезайте.

Я не использую randomForestмного, но, насколько мне известно, есть несколько параметров, которые вы можете использовать для настройки ваших лесов:

  • nodesize - минимальный размер терминальных узлов
  • maxnodes - максимальное количество терминальных узлов
  • mtry - количество переменных, используемых для построения каждого дерева (спасибо @ user777)
Алексей Григорьев
источник
1
И mtryколичество переменных, которые алгоритм рисует для построения каждого дерева, по умолчанию квадратный корень из общего количества объектов.
Sycorax говорит восстановить Монику
Я бы оставил maxnodes и более низкий размер сэмпла. Оба decresing maxnodes и sampsize дают дерева с меньшей глубиной и более надежными лесами, sampsize однако более низкой корреляцией дерева также, и лес, вероятно , сходится к снижению ошибки перекрестной проверки предсказания см stackoverflow.com/questions/34997134/...
Сорен Havelund Веллинг
2

Вы можете использовать методы перекрестной проверки, такие как K-перекрестная проверка.

Fre
источник
вам нужно нормализовать / масштабировать функции?
Чарльз
4
@ Чарльз мои извинения. В действительности нет необходимости масштабировать особенности использования случайных лесов. См: stackoverflow.com/questions/8961586/...
FRE
Я думаю, что перекрестная проверка была бы полезной. Это сравнительно небольшой набор данных с проверкой разделенной выборки, потенциально производящей нестабильные оценки ошибки (хотя по общему признанию я понимаю, что это не проблема здесь)
Чарльз
1

вы можете настроить параметры с помощью gridsearch

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)
Аман Басси
источник
Попытка редактора предполагает, что модуль GridSearchCVнаходится в model_selection, и, следовательно, должна быть вторая строка кода from sklearn.model_selection import GridSearchCV.
gung - Восстановить Монику
0

Попробуйте настроить параметр max_depth в диапазонах [5, 15], но не более этого, потому что, если вы берете большую глубину, есть большая вероятность переобучения.

Навин Челимилла
источник