Я использую пакет randomForest в R (R версия 2.13.1, randomForest версия 4.6-2) для регрессии и заметил значительный сдвиг в моих результатах: ошибка прогнозирования зависит от значения переменной отклика. Высокие значения недооценены, а низкие значения переоценены. Сначала я подозревал, что это было следствием моих данных, но следующий простой пример предполагает, что это присуще алгоритму случайного леса:
n = 1000;
x1 = rnorm(n, mean = 0, sd = 1)
response = x1
predictors = data.frame(x1=x1)
rf = randomForest(x=predictors, y=response)
error = response-predict(rf, predictors)
plot(x1, error)
Я подозреваю, что смещение зависит от распределения ответа, например, если x1
оно распределено равномерно, смещения нет; если x1
экспоненциально распределено, смещение является односторонним. По существу, значения ответа в хвостах нормального распределения являются выбросами. Неудивительно, что модели будет сложно прогнозировать выбросы. В случае randomForest, значение отклика экстремальной величины из хвоста распределения с меньшей вероятностью попадет в конечный лист, и его эффект будет размыт в среднем по ансамблю.
Обратите внимание, что я пытался уловить этот эффект в предыдущем примере, «RandomForest в R хвосты линейной регрессии mtry». Это был плохой пример. Если смещение в вышеприведенном примере действительно присуще алгоритму, из этого следует, что поправка смещения может быть сформулирована с учетом распределения ответов, которое каждый пытается предсказать, что приводит к более точным прогнозам.
Подвержены ли смещения распределения ответов методы на основе деревьев, такие как случайный лес? Если да, то известно ли это ранее статистическому сообществу и как это обычно корректируется (например, вторая модель, которая использует остатки смещенной модели в качестве входных данных)?
Исправление смещения, зависящего от ответа, затруднено, поскольку по своей природе ответ неизвестен. К сожалению, оценка / прогнозируемый ответ не часто имеют одинаковое отношение к смещению.
источник
Ответы:
Это совершенно так, как вы подозреваете - тот факт, что конечные узлы содержат средства над некоторым набором объектов, делает любую модель дерева регрессии сужать распределение ответов и делает невозможной любую экстраполяцию. Ансамбль, конечно, не помогает с этим и фактически ухудшает ситуацию.
Наивное решение (и опасное из-за переоснащения) состоит в том, чтобы обернуть модель в некую классическую регрессию, которая бы изменила масштаб отклика на желаемое распределение.
Лучшее решение - одна из моделей дерева «модель в листе», например, MOB в пакете для вечеринок. Идея здесь заключается в том, что разделение пространства признаков должно закончиться, когда задача упрощается не до простого значения (как в обычном дереве), а до простого отношения (скажем, линейного) между ответом и некоторыми предикторами. Такое отношение теперь может быть разрешено путем подбора некоторой простой модели, которая не будет нарушать распределение или обрезать экстремальные значения и сможет экстраполировать.
источник
У меня была точно такая же проблема с условным RF, доступным через пакет погремушки. Я написал об этом по электронной почте Грэму Уильямсу (автору трещотки), который любезно направил мой запрос авторам леса, который ответил и предложил поиграть с двумя параметрами, которые на самом деле нигде не упоминаются в документации CRF, но, тем не менее, похоже, касаются проблема, а именно minplit = 2 и minbucket = 1.
источник
minsplit
Я полагаю, вы имеете в видуВы должны оценить оптимальное значение mtry и размера выборки, сводя к минимуму «перекрестную проверку ошибки» выборки по сетке различных mtry, параметров выборки для любой соответствующей переменной отклика для фиксированного набора функций, а затем делать любые выводы. с точки зрения результатов. Вы можете создать комбинацию параметров сетки, используя expand.grid.
источник