14

Я использую RandomForestClassifier, реализованный в пакете python sklearn, чтобы построить двоичную классификационную модель. Ниже результаты перекрестных проверок:Как решить переобучение в случайном лесу Python sklearn?

Fold 1 : Train: 164 Test: 40 
Train Accuracy: 0.914634146341 
Test Accuracy: 0.55 

Fold 2 : Train: 163 Test: 41 
Train Accuracy: 0.871165644172 
Test Accuracy: 0.707317073171 

Fold 3 : Train: 163 Test: 41 
Train Accuracy: 0.889570552147 
Test Accuracy: 0.585365853659 

Fold 4 : Train: 163 Test: 41 
Train Accuracy: 0.871165644172 
Test Accuracy: 0.756097560976 

Fold 5 : Train: 163 Test: 41 
Train Accuracy: 0.883435582822 
Test Accuracy: 0.512195121951 

Я использую «Цена», чтобы предсказать «качество», которое является порядковым значением. В каждой перекрестной проверке имеется 163 учебных примера и 41 тестовый пример.

Видимо, переобучение происходит здесь. Итак, есть ли какие-либо параметры, предоставленные sklearn, для преодоления этой проблемы? Я нашел некоторые параметры here, например. min_samples_split и min_sample_leaf, но я не совсем понимаю, как их настроить.

Заранее благодарен!

+0

Вы пробовали использовать ExtraTreesClassifier? Это поможет, если у вас есть несколько предикторов. Если вы тренируетесь только на одном предсказателе, и у вас всего 200 образцов, я думаю, что вы всегда будете иметь некоторую степень переобучения. – BrenBarn

+2

Разница в точности теста велика, но ваш набор образцов очень мал. В случае, если вы хотели предложить _overfitting_ как большую разницу в точности поезда/теста, то есть ** не ** переоснащение: рассмотрите возможность использования ближайших соседей, вы всегда получите 0 для ошибки обучения. (так что точность поезда здесь не имеет смысла.) – Falcon

+0

Вы говорите, что пытаетесь предсказать «качество», используя только «Цена»? Если это так, то случайный лес не лучший. Попробуйте классификатор логистической регрессии. – denson

ответ

30

Я согласен с @Falcon w.r.t. размер набора данных. Вероятно, основная проблема заключается в небольшом размере набора данных. Если возможно, самое лучшее, что вы можете сделать, это получить больше данных, чем больше данных (как правило), тем меньше вероятность того, что они будут переработаны, так как случайные шаблоны, которые кажутся прогностическими, начинают заглушаться по мере увеличения размера набора данных.

То есть, я хотел бы посмотреть на следующих Params:

  1. n_estimators: @Falcon не так, в общем, чем больше деревьев менее вероятно алгоритм заключается в overfit. Попробуйте , увеличив это. Чем меньше это число, тем ближе модель к дереву решений с ограниченным набором функций.
  2. max_features: попробуйте уменьшить это число (попробуйте 30-50% от количества функций). Это определяет, сколько функций каждое дерево назначается случайным образом. Чем меньше, тем меньше вероятность переустройства, но слишком маленькая начнет вводиться при подгонке.
  3. max_depth: экспериментируйте с этим. Это уменьшит сложность изученных моделей, снизив риск подбора. Попробуйте начать с малого, скажем, 5-10, и увеличивая вы получите лучший результат.
  4. min_samples_leaf: Попробуйте установить значение более одного. Это имеет сходный эффект с параметром max_depth, это означает, что ветвь прекратит расщепление, если листья имеют такое количество выборок каждый.

примечание при выполнении этой работы научный. Используйте 3 набора данных, набор для обучения, отдельный набор данных «разработки» для настройки ваших параметров и набор тестов, который проверяет конечную модель с оптимальными параметрами. Изменяйте только один параметр за раз и оценивайте результат. Или экспериментируйте с алгоритмом gridsearch sklearn для поиска по этим параметрам сразу.

Смежные вопросы