Saya ingin membangun model regresi yang merupakan rata-rata dari beberapa model OLS, masing-masing berdasarkan pada subset dari data lengkap. Gagasan di balik ini didasarkan pada makalah ini . Saya membuat lipatan k dan membuat model OLS k, masing-masing pada data tanpa salah satu lipatan. Saya kemudian rata-rata koefisien regresi untuk mendapatkan model akhir.
Ini menurut saya mirip dengan sesuatu seperti regresi hutan acak, di mana banyak pohon regresi dibangun dan dirata-rata. Namun, kinerja model OLS rata-rata tampaknya lebih buruk daripada hanya membangun satu model OLS pada seluruh data. Pertanyaan saya adalah: apakah ada alasan teoritis mengapa rata-rata beberapa model OLS salah atau tidak diinginkan? Bisakah kita mengharapkan rata-rata beberapa model OLS untuk mengurangi overfitting? Di bawah ini adalah contoh R.
#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
sumber
Jawaban:
Mengingat bahwa OLS meminimalkan MSE dari residu di antara semua estimator linier yang tidak bias (oleh teorema Gauss-Markov), dan bahwa rata-rata tertimbang dari estimator linier yang tidak bias (misalnya, fungsi linear yang diestimasi dari masing-masing lipatan Anda ) itu sendiri penaksir linier, harus OLS yang diterapkan pada seluruh kumpulan data akan mengungguli rata-rata tertimbang dari regresi linier kecuali, secara kebetulan, keduanya memberikan hasil yang identik.kk k
Mengenai overfitting - model linier tidak rentan terhadap overfitting dengan cara yang sama seperti, misalnya, Gradient Boosting Machines. Penegakan linearitas memastikan hal itu. Jika Anda memiliki sejumlah kecil pencilan yang menarik garis regresi OLS Anda jauh dari yang seharusnya, pendekatan Anda mungkin sedikit - hanya sedikit - memperbaiki kerusakan, tetapi ada pendekatan yang jauh lebih unggul untuk menangani masalah itu dalam konteks sejumlah kecil pencilan, misalnya, regresi linier yang kuat, atau sekadar memplot data, mengidentifikasi, dan kemudian menghapus pencilan (dengan asumsi bahwa mereka memang tidak mewakili proses pembuatan data yang parameternya ingin Anda perkirakan).
sumber
Bagaimana dengan menjalankan bootstrap? Buat 100-1000 sampel replikat dengan tingkat pengambilan sampel 100% menggunakan pengambilan sampel acak tidak terbatas (pengambilan sampel dengan penggantian). Jalankan model dengan mereplikasi dan dapatkan median untuk setiap koefisien regresi. Atau coba artinya. Lihat juga dan distribusi masing-masing koefisien untuk melihat apakah tanda-tanda berubah dan pada nilai distribusi kumulatif apa.
sumber