Regression
平均回歸係數以建立模型是否存在任何理論問題?
我想建立一個回歸模型,它是多個 OLS 模型的平均值,每個模型都基於完整數據的一個子集。這背後的想法是基於這篇論文。我創建了 k 個折疊並構建了 k 個 OLS 模型,每個模型都基於沒有一個折疊的數據。然後我平均回歸係數以獲得最終模型。
這讓我覺得類似於隨機森林回歸,其中構建了多個回歸樹並對其進行平均。但是,平均 OLS 模型的性能似乎比簡單地在整個數據上構建一個 OLS 模型更差。我的問題是:為什麼平均多個 OLS 模型是錯誤的或不可取的,有理論上的原因嗎?我們可以期望平均多個 OLS 模型來減少過擬合嗎?下面是一個 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
鑑於 OLS 最小化了所有無偏線性估計器中殘差的 MSE(通過高斯馬爾可夫定理),並且無偏線性估計器的加權平均值(例如,來自您的每個folds) 本身是一個無偏的線性估計器,它必須是應用於整個數據集的 OLS 將優於加權平均線性回歸,除非偶然,兩者給出相同的結果。
至於過擬合——線性模型不像梯度提昇機器那樣容易過擬合。線性的執行就是為了這一點。如果您有非常少量的異常值將您的 OLS 回歸線拉離應有的位置,您的方法可能會稍微 - 只是稍微 - 減輕損害,但在處理該問題的情況下有更好的方法極少數的異常值,例如穩健的線性回歸,或簡單地繪製數據,識別,然後刪除異常值(假設它們確實不代表您有興趣估計其參數的數據生成過程。)