জিবিএম প্যাকেজ বনাম ক্যারেট জিবিএম ব্যবহার করে


13

আমি ব্যবহার করে মডেল টিউন করছি caret, তবে gbmপ্যাকেজটি ব্যবহার করে আবার মডেল চালাচ্ছি । caretপ্যাকেজটি ব্যবহার করে gbmএবং আউটপুট একই হওয়া উচিত এটি আমার বোধগম্য । যাইহোক, কেবলমাত্র একটি দ্রুত পরীক্ষা চালানো data(iris)মূল্যায়ন মেট্রিক হিসাবে আরএমএসই এবং আর ^ 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 = 0,0009125435

rmse.caret-rmse.gbm = -0,001680319

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.