Как решить переобучение в случайном лесу Python sklearn?

Я использую RandomForestClassifier, реализованный в пакете 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, для преодоления этой проблемы? Я нашел некоторые параметры здесь, например min_samples_split и min_sample_leaf, но я не совсем понимаю, как их настроить.

Заранее спасибо!

Ответ 1

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

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

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

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