मैं मॉडल ट्यूनिंग का उपयोग कर रहा हूं caret, लेकिन फिर gbmपैकेज का उपयोग करके मॉडल को फिर से चलाना । यह मेरी समझ है कि caretपैकेज का उपयोग होता है gbmऔर आउटपुट समान होना चाहिए। हालाँकि, data(iris)मूल्यांकन के रूप में RMSE और R ^ 2 का उपयोग करके लगभग 5% के मॉडल में एक विसंगति दिखाती है , बस एक त्वरित परीक्षण रन । मैं आंशिक निर्भरता वाले भूखंडों का उपयोग करने के लिए इष्टतम मॉडल प्रदर्शन का उपयोग करना चाहता हूं caretलेकिन फिर से चलाना चाहता हूं gbm। प्रतिलिपि प्रस्तुत करने योग्यता के लिए नीचे कोड।
मेरे प्रश्न होंगे:
1) मैं इन दोनों पैकेजों के बीच अंतर क्यों देख रहा हूं, भले ही वे समान हों (मैं समझता हूं कि वे स्टोचस्टिक हैं लेकिन 5% कुछ हद तक बड़ा अंतर है, खासकर जब मैं irisअपने मॉडलिंग के लिए इतने अच्छे डेटासेट का उपयोग नहीं कर रहा हूं) ।
2) क्या दोनों पैकेजों का उपयोग करने के कोई फायदे या नुकसान हैं - यदि हां, तो कौन से हैं?
3) असंबंधित: irisडेटासेट का उपयोग करते हुए इष्टतम interaction.depth5 है हालांकि यह जितना मैंने पढ़ा है उससे अधिक है इसका उपयोग अधिकतम होना चाहिए 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`