C'è qualche problema teorico con la media dei coefficienti di regressione per costruire un modello?


13

Voglio costruire un modello di regressione che è una media di più modelli OLS, ciascuno basato su un sottoinsieme dei dati completi. L'idea alla base di questo è basata su questo documento . Creo k pieghe e costruisco k modelli OLS, ognuno sui dati senza una delle pieghe. Quindi faccio una media dei coefficienti di regressione per ottenere il modello finale.

Questo mi sembra simile a qualcosa come la regressione casuale della foresta, in cui vengono costruiti e mediati alberi di regressione multipla. Tuttavia, le prestazioni del modello OLS medio sembrano peggiori della semplice creazione di un modello OLS sull'intero dato. La mia domanda è: esiste una ragione teorica per cui la media di più modelli OLS è sbagliata o indesiderabile? Possiamo aspettarci che la media di più modelli OLS riduca il sovrautilizzo? Di seguito è riportato un esempio 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
Si potrebbe provare a utilizzare i mediani valori dei coefficienti, piuttosto che i media valori dei coefficienti. Ho visto che questa tecnica a volte può dare risultati migliori.
James Phillips,

Probabilmente non ti darà un aumento delle prestazioni o ridurrà l'eccessivo adattamento, ma ha altre applicazioni utili. Questo tipo utilizza per selezionare la tendenza corretta per i dati delle sue serie temporali in streaming youtube.com/watch?v=0zpg9ODE6Ww&index=64&list=WL
josh

Risposte:


14

Dato che OLS minimizza l'MSE dei residui tra tutti gli stimatori lineari imparziali (dal teorema di Gauss-Markov) e che una media ponderata di stimatori lineari imparziali (ad esempio, le funzioni lineari stimate da ciascuna delle tue pieghe) è di per sé un'opinione stimatore lineare, deve essere che OLS applicato all'intero set di dati superi la media ponderata delle regressioni lineari meno che, per caso, i due non forniscano risultati identici.kkk

Per quanto riguarda il sovradimensionamento - i modelli lineari non sono inclini al sovradimensionamento nello stesso modo in cui lo sono, ad esempio, le macchine per il potenziamento del gradiente. L'imposizione della linearità vede questo. Se hai un numero molto piccolo di valori anomali che allontanano la tua linea di regressione OLS da dove dovrebbe essere, il tuo approccio potrebbe leggermente - solo leggermente - migliorare il danno, ma ci sono approcci di gran lunga superiori per affrontare quel problema nel contesto di un numero molto piccolo di valori anomali, ad esempio una regressione lineare robusta, o semplicemente la stampa dei dati, l'identificazione e quindi la rimozione dei valori anomali (presupponendo che non siano effettivamente rappresentativi del processo di generazione dei dati di cui si desidera stimare i parametri).


per "sovraperformare" intendi che avrà stime migliori dei coefficienti o che sarà migliore dell'approccio kfold su tutta la linea (esclusi i valori erratici, come hai detto)?
Arash Howaida,

Avrà un MSE più basso dei residui rispetto all'approccio k-fold, il che implica, supponendo che la forma funzionale del modello sia corretta, che in media avrà migliori stime dei coefficienti e sarà migliore dell'approccio k-fold attraverso il consiglio di amministrazione - a meno che il problema specifico non indichi che un criterio diverso, ad esempio un errore assoluto medio, deve essere preferito a MSE.
jbowman,

1

Che dire di eseguire un bootstrap? Crea 100-1000 campioni replicati con una frequenza di campionamento del 100% utilizzando un campionamento casuale senza restrizioni (campionamento con sostituzione). Eseguire i modelli replicando e ottenere la mediana per ciascun coefficiente di regressione. Oppure prova la media. Dai anche un'occhiata e la distribuzione di ciascun coefficiente per vedere se i segni cambiano e quali valori di distribuzione cumulativi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.