Quiero construir un modelo de regresión que sea un promedio de múltiples modelos OLS, cada uno basado en un subconjunto de datos completos. La idea detrás de esto se basa en este documento . Creo k pliegues y construyo k modelos OLS, cada uno con datos sin uno de los pliegues. Luego promedio los coeficientes de regresión para obtener el modelo final.
Esto me parece similar a algo como la regresión forestal aleatoria, en la que se construyen y promedian árboles de regresión múltiple. Sin embargo, el rendimiento del modelo OLS promedio parece peor que simplemente construir un modelo OLS en todos los datos. Mi pregunta es: ¿hay alguna razón teórica por la que promediar múltiples modelos OLS sea incorrecto o indeseable? ¿Podemos esperar promediar múltiples modelos OLS para reducir el sobreajuste? A continuación se muestra un ejemplo 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
fuente
Respuestas:
Dado que OLS minimiza el MSE de los residuos entre todos los estimadores lineales insesgados (según el teorema de Gauss-Markov), y que un promedio ponderado de estimadores lineales insesgados (por ejemplo, las funciones lineales estimadas de cada uno de sus pliegues) es en sí mismo un insesgado estimador lineal, debe ser que la OLS aplicada a todo el conjunto de datos superará el promedio ponderado de las regresiones lineales a menos que, por casualidad, las dos den resultados idénticos.k k
En cuanto al sobreajuste: los modelos lineales no son propensos a sobreajustar de la misma manera que, por ejemplo, las máquinas de aumento de gradiente. La aplicación de la linealidad se encarga de eso. Si tiene un número muy pequeño de valores atípicos que alejan su línea de regresión de OLS de donde debería estar, su enfoque puede mejorar levemente, solo ligeramente, el daño, pero existen enfoques muy superiores para tratar ese problema en el contexto de un número muy pequeño de valores atípicos, por ejemplo, una regresión lineal robusta, o simplemente trazar los datos, identificar y luego eliminar los valores atípicos (suponiendo que de hecho no sean representativos del proceso de generación de datos cuyos parámetros le interesan estimar).
fuente
¿Qué pasa con correr un bootstrap? Cree 100-1000 muestras replicadas con una tasa de muestreo del 100% utilizando un muestreo aleatorio sin restricciones (muestreo con reemplazo). Ejecute los modelos por réplica y obtenga la mediana para cada coeficiente de regresión. O prueba la media. También eche un vistazo y la distribución de cada coeficiente para ver si los signos cambian ya qué valores de distribución acumulativa.
fuente