을 사용하여 모델 튜닝을 수행 caret
했지만 gbm
패키지를 사용하여 모델을 다시 실행했습니다 . caret
패키지가 사용 gbm
하고 출력이 동일해야한다는 것을 이해합니다 . 그러나 data(iris)
RMSE와 R ^ 2를 평가 지표로 사용하면 약 5 %의 모델에서 불일치가 발생합니다. 부분 종속성 플롯을 사용 하기 위해 최적의 모델 성능을 찾고 caret
싶지만 다시 실행 하고 싶습니다 gbm
. 재현성을 위해 아래 코드를 작성하십시오.
내 질문은 :
1) 왜이 두 패키지가 동일해야하는데 왜 차이가 나는가 (왜냐하면 그것들은 확률 적이지만 5 %는 큰 차이가 있음을 이해합니다. 특히 iris
모델링 과 같은 멋진 데이터 세트를 사용하지 않을 때 ) .
2) 두 패키지를 모두 사용하면 어떤 장단점이 있습니까?
3) 관련이 없음 : iris
데이터 세트를 사용하면 최적의 값 interaction.depth
이 5이지만 내가 읽은 것보다 최대를 사용해야 floor(sqrt(ncol(iris)))
하는 것보다 2가 높습니다 . 이것은 엄격한 경험 규칙입니까, 아니면 매우 유연합니까?
library(caret)
library(gbm)
library(hydroGOF)
library(Metrics)
data(iris)
# Using caret
caretGrid <- expand.grid(interaction.depth=c(1, 3, 5), n.trees = (0:50)*50,
shrinkage=c(0.01, 0.001),
n.minobsinnode=10)
metric <- "RMSE"
trainControl <- trainControl(method="cv", number=10)
set.seed(99)
gbm.caret <- train(Sepal.Length ~ ., data=iris, distribution="gaussian", method="gbm",
trControl=trainControl, verbose=FALSE,
tuneGrid=caretGrid, metric=metric, bag.fraction=0.75)
print(gbm.caret)
# caret determines the optimal model to be at n.tress=700, interaction.depth=5, shrinkage=0.01
# and n.minobsinnode=10
# RMSE = 0.3247354
# R^2 = 0.8604
# Using GBM
set.seed(99)
gbm.gbm <- gbm(Sepal.Length ~ ., data=iris, distribution="gaussian", n.trees=700, interaction.depth=5,
n.minobsinnode=10, shrinkage=0.01, bag.fraction=0.75, cv.folds=10, verbose=FALSE)
best.iter <- gbm.perf(gbm.gbm, method="cv")
print(best.iter)
# Here the optimal n.trees = 540
train.predict <- predict.gbm(object=gbm.gbm, newdata=iris, 700)
print(rmse(iris$Sepal.Length, train.predict))
# RMSE = 0.2377
R2 <- cor(gbm.gbm$fit, iris$Sepal.Length)^2
print(R2)
# R^2 = 0.9178`