В наборе данных радужной оболочки имеется 3 различных вида, первые 50 рядов - сетоза, следующие 50 - разноцветные, а последние 50 - вирджиновые. Поэтому я думаю, что лучше смешать строки, а также сделать столбец «Виды» релевантным.
library(ggplot2)
ggplot(iris,aes(x=Sepal.Width,y=Sepal.Length,col=Species)) + geom_point()
![enter image description here](https://i.stack.imgur.com/n6ywu.png)
Во-вторых, вы должны сделать это более отличается несколько копий, чтобы увидеть его неопределенность. Для этого мы можем использовать каретку и заранее определить тренировочные образцы, а также обеспечить фиксированную сетку. Нас интересует ошибка во время тренировки с перекрестной проверкой, которая похожа на то, что вы делаете:
set.seed(999)
idx = split(sample(nrow(iris)),1:nrow(iris) %% 3)
tr = trainControl(method="cv",index=idx)
this_grid = data.frame(interaction.depth=2,shrinkage=0.001,
n.minobsinnode=10,n.trees=1000)
gbm_fit = train (Sepal.Width ~., Data = iris, method) = "gbm", distribution = "gaussian", tuneGrid = tg, trControl = tr)
Затем мы используем те же образцы для подгонки rpart:
#the default for rpart
this_grid = data.frame(cp=0.01)
rpart_fit = train(Sepal.Width ~ . ,data=iris,method="rpart",
trControl=tr,tuneGrid=this_grid)
Наконец, мы сравниваем их и они очень похожи:
gbm_fit$resample
RMSE Rsquared MAE Resample
1 0.3459311 0.5000575 0.2585884 0
2 0.3421506 0.4536114 0.2631338 1
3 0.3428588 0.5600722 0.2693837 2
RMSE Rsquared MAE Resample
1 0.3492542 0.3791232 0.2695451 0
2 0.3320841 0.4276960 0.2550386 1
3 0.3284239 0.4343378 0.2570833 2
Так что я подозреваю, что в приведенном выше примере есть что-то странное. Опять же, это всегда зависит от ваших данных, для некоторых данных, таких как, например, iris, rpart может быть достаточно хорошим, потому что есть очень сильные предикторы. Также для сложных моделей, таких как gbm, вам, скорее всего, нужно потренироваться, используя что-то подобное, чтобы найти оптимальные параметры.