GBM पैकेज बनाम Caret GBM का उपयोग कर


13

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

जवाबों:


6

डिफ़ॉल्ट ग्रिड के साथ मापदंडों का अनुकूलन करने के लिए उपयोग करें और एक ही परिणाम के लिए भविष्यवाणी का उपयोग करें:

R2.caret-R2.gbm = .०००९१२५४३५

rmse.caret-rmse.gbm = -.००,१६,८०,३१९

library(caret)
library(gbm)
library(hydroGOF)
library(Metrics)
data(iris)

# Using caret with the default grid to optimize tune parameters automatically
# GBM Tuning parameters:
# n.trees (# Boosting Iterations)
# interaction.depth (Max Tree Depth)
# shrinkage (Shrinkage)
# n.minobsinnode (Min. Terminal Node Size)

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.predict <- predict(gbm.caret, newdata=iris, type="raw")

rmse.caret<-rmse(iris$Sepal.Length, caret.predict)
print(rmse.caret)

R2.caret <- cor(gbm.caret$finalModel$fit, iris$Sepal.Length)^2
print(R2.caret)

#using gbm without caret with the same parameters
set.seed(99)
gbm.gbm <- gbm(Sepal.Length ~ .
               , data=iris
               , distribution="gaussian"
               , n.trees=150
               , interaction.depth=3
               , n.minobsinnode=10
               , shrinkage=0.1
               , bag.fraction=0.75
               , cv.folds=10
               , verbose=FALSE
               )
best.iter <- gbm.perf(gbm.gbm, method="cv")
print(best.iter)

train.predict <- predict.gbm(object=gbm.gbm, newdata=iris, 150)

rmse.gbm<-rmse(iris$Sepal.Length, train.predict)
print(rmse.gbm)

R2.gbm <- cor(gbm.gbm$fit, iris$Sepal.Length)^2
print(R2.gbm)

print(R2.caret-R2.gbm)
print(rmse.caret-rmse.gbm)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.