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