मैं मॉडल ट्यूनिंग का उपयोग कर रहा हूं 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`