আমি একটি রিগ্রেশন মডেল তৈরি করতে চাই যা গড়ে ওঠা একাধিক ওএলএস মডেল, প্রতিটি সম্পূর্ণ ডেটার সাবসেটের উপর ভিত্তি করে। এর পেছনের ধারণাটি এই কাগজের উপর ভিত্তি করে । আমি কে ভাঁজগুলি তৈরি করি এবং কে ওএলএস মডেলগুলি তৈরি করি, প্রতিটি ফোল্ডের কোনও ছাড়াই ডেটাতে। আমি তারপরে চূড়ান্ত মডেলটি পেতে রেগ্রেশন সহগের গড়।
এটি আমাকে এলোমেলোভাবে বনভূমির মতো কিছু হিসাবে আঘাত করে, যেখানে একাধিক রিগ্রেশন গাছগুলি নির্মিত এবং গড় হয়। তবে, গড় ওএলএস মডেলের পারফরম্যান্স পুরো ডেটাতে কেবল একটি ওএলএস মডেল তৈরির চেয়ে খারাপ বলে মনে হয়। আমার প্রশ্ন হ'ল: একাধিক ওএলএস মডেলের গড় ভুল বা অবাঞ্ছিত হওয়ার কোন তাত্ত্বিক কারণ আছে? আমরা কী একাধিক ওএলএস মডেলের গড়পড়তা কমিয়ে আনতে আশা করতে পারি? নীচে একটি আর উদাহরণ দেওয়া আছে।
#Load and prepare data
library(MASS)
data(Boston)
trn <- Boston[1:400,]
tst <- Boston[401:nrow(Boston),]
#Create function to build k averaging OLS model
lmave <- function(formula, data, k, ...){
lmall <- lm(formula, data, ...)
folds <- cut(seq(1, nrow(data)), breaks=k, labels=FALSE)
for(i in 1:k){
tstIdx <- which(folds==i, arr.ind = TRUE)
tst <- data[tstIdx, ]
trn <- data[-tstIdx, ]
assign(paste0('lm', i), lm(formula, data = trn, ...))
}
coefs <- data.frame(lm1=numeric(length(lm1$coefficients)))
for(i in 1:k){
coefs[, paste0('lm', i)] <- get(paste0('lm', i))$coefficients
}
lmnames <- names(lmall$coefficients)
lmall$coefficients <- rowMeans(coefs)
names(lmall$coefficients) <- lmnames
lmall$fitted.values <- predict(lmall, data)
target <- trimws(gsub('~.*$', '', formula))
lmall$residuals <- data[, target] - lmall$fitted.values
return(lmall)
}
#Build OLS model on all trn data
olsfit <- lm(medv ~ ., data=trn)
#Build model averaging five OLS
olsavefit <- lmave('medv ~ .', data=trn, k=5)
#Build random forest model
library(randomForest)
set.seed(10)
rffit <- randomForest(medv ~ ., data=trn)
#Get RMSE of predicted fits on tst
library(Metrics)
rmse(tst$medv, predict(olsfit, tst))
[1] 6.155792
rmse(tst$medv, predict(olsavefit, tst))
[1] 7.661 ##Performs worse than olsfit and rffit
rmse(tst$medv, predict(rffit, tst))
[1] 4.259403