Existe-t-il un problème théorique avec la moyenne des coefficients de régression pour construire un modèle?

13

Je veux construire un modèle de régression qui est une moyenne de plusieurs modèles OLS, chacun basé sur un sous-ensemble des données complètes. L'idée derrière cela est basée sur cet article . Je crée k plis et je crée k modèles OLS, chacun sur des données sans l'un des plis. Je fais ensuite la moyenne des coefficients de régression pour obtenir le modèle final.

Cela me semble similaire à quelque chose comme la régression aléatoire des forêts, dans laquelle plusieurs arbres de régression sont construits et moyennés. Cependant, les performances du modèle OLS moyenné semblent pires que de simplement construire un modèle OLS sur l'ensemble des données. Ma question est: existe-t-il une raison théorique pour laquelle la moyenne de plusieurs modèles OLS est erronée ou indésirable? Pouvons-nous nous attendre à ce que la moyenne de plusieurs modèles OLS réduise le sur-ajustement? Voici un exemple 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
Gaurav Bansal
la source
2
Vous pouvez essayer d'utiliser les valeurs médianes des coefficients plutôt que les valeurs moyennes des coefficients. J'ai vu que cette technique peut parfois donner de meilleurs résultats.
James Phillips
Il ne vous donnera probablement pas d'amélioration des performances ni de réduction du sur-ajustement, mais il a d'autres applications utiles. Ce type utilise pour sélectionner la bonne tendance pour ses données de séries chronologiques en streaming youtube.com/watch?v=0zpg9ODE6Ww&index=64&list=WL
josh
Voir aussi cet article, stats.stackexchange.com/q/68030/28746
Alecos Papadopoulos

Réponses:

14

Étant donné que l'OLS minimise le MSE des résidus parmi tous les estimateurs linéaires sans biais (par le théorème de Gauss-Markov), et qu'une moyenne pondérée des estimateurs linéaires sans biais (par exemple, les fonctions linéaires estimées de chacun de vos plis) est elle-même sans biais estimateur linéaire, il faut que l'OLS appliqué à l'ensemble des données surperforme la moyenne pondérée des régressions linéaires à moins que, par hasard, les deux ne donnent des résultats identiques.kkk

En ce qui concerne le sur-ajustement - les modèles linéaires ne sont pas sujets au sur-ajustement de la même manière que, par exemple, les machines de renforcement de gradient le sont. L'application de la linéarité y veille. Si vous avez un très petit nombre de valeurs aberrantes qui tirent votre ligne de régression OLS loin de l'endroit où elle devrait être, votre approche peut légèrement - seulement légèrement - améliorer les dommages, mais il existe des approches bien supérieures pour traiter ce problème dans le contexte de un très petit nombre de valeurs aberrantes, par exemple, une régression linéaire robuste, ou simplement le traçage des données, l'identification, puis la suppression des valeurs aberrantes (en supposant qu'elles ne sont en effet pas représentatives du processus de génération de données dont vous souhaitez estimer les paramètres.)

jbowman
la source
par «surperformance», voulez-vous dire qu'elle aura de meilleures estimations des coefficients ou qu'elle sera meilleure que l'approche kfold à tous les niveaux (à l'exclusion des valeurs aberrantes, comme vous l'avez mentionné)?
Arash Howaida
Elle aura un MSE des résidus plus faible que l'approche k-fold, ce qui implique, en supposant que la forme fonctionnelle du modèle est correcte, qu'en moyenne, elle aura de meilleures estimations des coefficients et sera meilleure que l'approche k-fold à travers la carte - à moins que votre problème spécifique n'indique qu'un critère différent, par exemple, une erreur absolue moyenne, doit être préféré à MSE.
jbowman
1

Qu'en est-il de l'exécution d'un bootstrap? Créez 100 à 1000 échantillons répliqués avec un taux d'échantillonnage de 100% en utilisant un échantillonnage aléatoire sans restriction (échantillonnage avec remplacement). Exécutez les modèles par répétition et obtenez la médiane de chaque coefficient de régression. Ou essayez la moyenne. Jetez également un œil et la distribution de chaque coefficient pour voir si les signes changent et à quelles valeurs de distribution cumulative.

Jonas Bilenas
la source