У меня есть опыт работы в области компьютерных наук, но я пытаюсь научить себя науке данных, решая проблемы в Интернете.
Я работал над этой проблемой последние пару недель (около 900 строк и 10 функций). Сначала я использовал логистическую регрессию, но теперь я переключился на случайные леса. Когда я запускаю свою модель случайного леса на моих тренировочных данных, я получаю действительно высокие значения auc (> 99%). Однако, когда я запускаю ту же модель на тестовых данных, результаты не так хороши (точность около 77%). Это заставляет меня поверить, что я переоцениваю данные тренировок.
Каковы наилучшие методы предотвращения чрезмерной подгонки в случайных лесах?
Я использую r и rstudio в качестве среды разработки. Я использую randomForest
пакет и принял значения по умолчанию для всех параметров
Ответы:
Чтобы избежать чрезмерной подгонки в случайном лесу, главное, что вам нужно сделать, - это оптимизировать параметр настройки, который управляет количеством функций, которые выбираются случайным образом, чтобы вырастить каждое дерево из данных начальной загрузки. Как правило, вы делаете это через перекрестную проверку в кратном порядке, где k ∈ { 5 , 10 } , и выбираете параметр настройки, который минимизирует ошибку прогнозирования тестовой выборки. Кроме того, выращивание более крупного леса улучшит прогнозирующую точность, хотя, как правило, доходность уменьшается до нескольких сотен деревьев.k k∈{5,10}
источник
Как вы получаете 99% AUC от ваших тренировочных данных? Имейте в виду, что есть разница между
а также
при получении прогнозов для учебного набора данных. Первый вариант получает из собственного мешка предсказания от случайного леса. Обычно это то, что вы хотите, сравнивая прогнозные значения с фактическими данными обучения.
Второй обрабатывает ваши тренировочные данные, как если бы это был новый набор данных, и запускает наблюдения по каждому дереву. Это приведет к искусственно тесной корреляции между предсказаниями и фактическими данными, поскольку алгоритм RF обычно не обрезает отдельные деревья, вместо этого полагаясь на ансамбль деревьев для контроля переобучения. Так что не делайте этого, если хотите получить прогнозы на тренировочных данных.
источник
Для деревьев решений есть два способа обработки переоснащения: (а) не вырастить деревья целиком (б) обрезать
То же самое относится к лесу деревьев - не выращивайте их слишком много и обрезайте.
Я не использую
randomForest
много, но, насколько мне известно, есть несколько параметров, которые вы можете использовать для настройки ваших лесов:nodesize
- минимальный размер терминальных узловmaxnodes
- максимальное количество терминальных узловmtry
- количество переменных, используемых для построения каждого дерева (спасибо @ user777)источник
mtry
количество переменных, которые алгоритм рисует для построения каждого дерева, по умолчанию квадратный корень из общего количества объектов.Вы можете использовать методы перекрестной проверки, такие как K-перекрестная проверка.
источник
вы можете настроить параметры с помощью gridsearch
источник
GridSearchCV
находится вmodel_selection
, и, следовательно, должна быть вторая строка кодаfrom sklearn.model_selection import GridSearchCV
.Попробуйте настроить параметр max_depth в диапазонах [5, 15], но не более этого, потому что, если вы берете большую глубину, есть большая вероятность переобучения.
источник