Eu quero criar um modelo de regressão que seja uma média de vários modelos OLS, cada um com base em um subconjunto dos dados completos. A idéia por trás disso é baseada neste artigo . Crio k folds e construo k modelos OLS, cada um com dados sem uma das dobras. Em seguida, faço a média dos coeficientes de regressão para obter o modelo final.
Isso me parece semelhante a algo como regressão aleatória da floresta, na qual várias árvores de regressão são construídas e calculadas a média. No entanto, o desempenho do modelo OLS médio parece pior do que simplesmente construir um modelo OLS em todos os dados. Minha pergunta é: existe uma razão teórica para a média de vários modelos OLS estar errada ou indesejável? Podemos esperar que a média de vários modelos OLS reduza a super adaptação? Abaixo está um exemplo de 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
fonte
Respostas:
Quanto à super adaptação - os modelos lineares não são propensos à super adaptação da mesma maneira que, por exemplo, as máquinas de reforço de gradiente. A imposição da linearidade cuida disso. Se você tiver um número muito pequeno de discrepantes que puxam sua linha de regressão OLS para longe de onde deveria estar, sua abordagem pode melhorar um pouco - apenas um pouco - o dano, mas existem abordagens muito superiores para lidar com esse problema no contexto de um número muito pequeno de discrepantes, por exemplo, regressão linear robusta ou simplesmente plotar os dados, identificando e removendo os discrepantes (supondo que eles realmente não sejam representativos do processo de geração de dados cujos parâmetros você está interessado em estimar).
fonte
Que tal executar um bootstrap? Crie 100-1000 amostras replicadas com uma taxa de amostragem de 100% usando amostragem aleatória irrestrita (amostragem com substituição). Execute os modelos por replicação e obtenha a mediana para cada coeficiente de regressão. Ou tente a média. Observe também a distribuição de cada coeficiente para ver se os sinais mudam e quais valores de distribuição cumulativa.
fonte