Вы можете сделать намного лучше (rmse ~ 0,04, $ R ^ 2 $> 0,99), обучая отдельные деревья на небольших выборках или укусы , как их называл Брейман
Поскольку существуетПри значительном количестве шума в обучающих данных эта проблема на самом деле касается сглаживания, а не обобщения.В общих чертах машинное обучение требует увеличения регуляризации.Для учеников ансамбля это означает торговую силу для разнообразия.
Разнообразие randomForests может увеличиваться за счет уменьшения количества объектов-кандидатов на разделение (mtry
в R) или обучающего набора каждого дерева (sampsize
вР).Поскольку есть только 1 входной размер, mtry
не помогает, оставляя sampsize
.Это приводит к 3,5-кратному улучшению RMSE по сравнению с настройками по умолчанию и> 6-кратному улучшению по отношению к самим шумным тренировочным данным.Поскольку увеличение диверсификации означает увеличение дисперсии в прогнозировании отдельных учеников, нам также необходимо увеличить количество деревьев, чтобы стабилизировать ансамблевое прогнозирование.
маленькие сумки, больше деревьев :: rmse = 0,04 :
>sd(predict(randomForest(Y~.,data=mat, sampsize=60, nodesize=2,
replace=FALSE, ntree=5000),
mat)
- sin(x))
[1] 0.03912643
настройки по умолчанию :: rmse = 0,14 :
> sd(predict(randomForest(Y~.,data=mat),mat) - sin(x))
[1] 0.1413018
ошибкаиз-за шума в тренировочном наборе :: rmse = 0,25
> sd(y - sin(x))
[1] 0.2548882
Ошибка из-за шума, конечно, очевидна из
noise<-rnorm(1001)
y<-sin(x)+noise/4
Ввыше оценка проводится в отношении учебного набора, как и в первоначальном вопросе.Поскольку проблема заключается скорее в сглаживании, чем в обобщении, это не так вопиюще, как может показаться, но обнадеживает тот факт, что оценка «вне сумки» показывает схожую точность:
> sd(predict(randomForest(Y~.,data=mat, sampsize=60, nodesize=2,
replace=FALSE, ntree=5000))
- sin(x))
[1] 0.04059679