将回归系数平均以建立模型是否存在任何理论问题?


13

我想构建一个回归模型,该模型是多个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

2
您可以尝试使用值系数值,而不是平均系数值。我已经看到这种技术有时可以产生更好的结果。
James Phillips

它可能不会提高性能或减少过度拟合,但它确实具有其他有用的应用程序。此小伙子会为他的流式时间序列数据选择正确的趋势youtube.com/watch?v=0zpg9ODE6Ww&index=64&list=WL
乔什

另请参阅此帖子,stats.stackexchange.com
q /

Answers:


14

kk

关于过度拟合-线性模型不容易以与例如Gradient Boosting Machines相同的方式进行过度拟合。线性的执行就是这样。如果您有非常少的异常值将OLS回归线拉到应有的水平,则您的方法可能会稍有(仅略有缓解)缓解损害,但是在以下情况下,有很多更好的方法可以解决该问题:极少数离群值,例如鲁棒线性回归,或简单地绘制数据,识别然后消除离群值(假设它们确实不代表您想要估计其参数的数据生成过程)。


用“优于大市”的意思是说它会更好地估计系数,还是比整体上的kfold方法更好(如您提到的那样,不包括异常值)?
Arash Howaida

与k折方法相比,它的残差MSE较低,这意味着,假设模型的功能形式正确,则平均而言,它对系数的估计更好,并且在整个情况下比k折方法更好。董事会-除非您的特定问题表明MSE首选其他标准(例如平均绝对误差)。
jbowman '18

1

如何运行引导程序?使用不受限制的随机抽样(替换抽样),以100%的抽样率创建100-1000个重复抽样。通过复制运行模型,并获得每个回归系数的中位数。或尝试卑鄙。还要查看每个系数的分布,以查看符号是否发生变化以及累积分布值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.