Sto cercando di capire la logica alla base della selezione avanti-indietro (anche se so che esistono metodi migliori per la selezione del modello). Nella selezione del modello in avanti, il processo di selezione viene avviato con un modello vuoto e le variabili vengono aggiunte in sequenza. Nella selezione allindietro, il processo di selezione viene avviato con il modello completo e le variabili vengono escluse in sequenza.
Domanda: con quale modello inizia la selezione avanti-indietro?
È il modello completo? Il modello vuoto? Qualcosa in mezzo? Wikipedia e Hastie et al. (2009) – The Elements of Statistical Learning, pagina 60 stanno spiegando il metodo, ma non sono stato “in grado di trovare nulla sul modello di partenza. Per la mia analisi sto usando la funzione stepAIC
del R
pacchetto MASS
.
UPDATE:
Di seguito puoi trovare un esempio in R
. La funzione stepAIC stampa automaticamente ogni passaggio del processo di selezione nella console e sembra che la selezione inizi con il modello completo. Tuttavia, in base alla risposta di jjet non sono sicuro di aver fatto qualcosa di sbagliato.
# Example data N <- 1000000 y <- rnorm(N) x1 <- y + rnorm(N) x2 <- y + rnorm(N) x3 <- y + rnorm(N) x4 <- rnorm(N) x5 <- rnorm(N) x6 <- rnorm(N) data <- data.frame(y, x1, x2, x3, x4, x5, x6) # Selection library("MASS") mod <- lm(y ~., data) stepAIC(mod, direction = "both")
Commenti
Risposta
Credo che la selezione “avanti-indietro” sia un altro nome per la selezione “avanti-passo passo”. Questo è lapproccio predefinito utilizzato da stepAIC. In questa procedura, inizi con un modello vuoto e costruisci in sequenza proprio come nella selezione in avanti. Lunica avvertenza è che ogni volta che aggiungi una nuova variabile, $ X_ {new} $, devi controllare se qualcuna delle altre variabili che sono già nel modello deve essere eliminata dopo che $ X_ {new} $ è inclusa . In questo approccio, puoi finire per cercare “in modo non lineare” attraverso tutti i diversi modelli.
——– EDIT ——–
Il il seguente codice R illustra la differenza tra le tre strategie di selezione:
# library(MASS) set.seed(1) N <- 200000 y <- rnorm(N) x1 <- y + rnorm(N) x2 <- y + rnorm(N) x3 <- y + rnorm(N) x4 <- rnorm(N) x5 <- rnorm(N) x6 <- x1 + x2 + x3 + rnorm(N) data <- data.frame(y, x1, x2, x3, x4, x5, x6) fit1 <- lm(y ~ ., data) fit2 <- lm(y ~ 1, data) stepAIC(fit1,direction="backward") stepAIC(fit2,direction="forward",scope=list(upper=fit1,lower=fit2)) stepAIC(fit2,direction="both",scope=list(upper=fit1,lower=fit2))
Ho “modificato leggermente il tuo esempio in questo codice. Innanzitutto, ho impostato un seed in modo che puoi vedere gli stessi dati che ho usato. Ho anche ridotto N in modo che lalgoritmo funzioni un po più velocemente. Ho mantenuto tutte le tue variabili uguali tranne x6. x6 è ora la più predittiva di y individualmente – questo lo renderà il primo variabile scelta nella selezione forward e forward-stepwise. Ma una volta che x1, x2 e x3 entrano nel modello, x6 diventa indipendente da y e dovrebbe essere esclusa. Vedrai che forward-stepwise fa esattamente questo. Inizia con x6, procede includendo x1, x2 e x3, quindi torna indietro e rilascia x6 e termina. Se usi solo forward, x6 rimarrà nel modello perché lalgoritmo non torna mai a questo tipo di controllo della multicollinearità.
Commenti
- Grazie tu per la tua risposta jjet! Ha perfettamente senso quello che dici, ma se esegui il codice che ho aggiornato sopra sembra che la selezione inizi con il modello completo. Ho fatto qualcosa di sbagliato?
- Solo un piccolo problema con il tuo codice. Hai scritto mod < – lm (y ~., Data) seguito da stepAIC (mod, direction = " entrambi "). Nella prima riga, ' hai effettivamente definito un modello iniziale per includere tutte le variabili scrivendo " y ~. ". Questo è ora il tuo punto di partenza per la selezione in avanti. Invece, ' vorrai scrivere " y ~ 1 " che è solo un modello di intercettazione: il punto di partenza che ' stai cercando. Ho ' ho apportato modifiche sopra con il codice R che dovrebbero chiarire questo per te.
- Grazie mille per il grande aiuto!Unultima domanda: se mantengo il mio esempio come se fosse senza largomento scope e con
mod <- lm(y ~., data)
, sta eseguendo una normale selezione allindietro o sta eseguendo una selezione avanti-indietro con un modello di partenza completo? - Questultimo. ' sta procedendo avanti-indietro utilizzando un modello iniziale che include tutte le variabili. Se ' non è stato definito lelenco degli ambiti, verrà considerato " inferiore " modello è il modello che hai specificato inizialmente e il tuo modello " superiore " è il modello completo.
Risposta
La selezione del modello avanti-indietro sono due approcci avidi per risolvere il problema dellottimizzazione combinatoria di trovare la combinazione ottimale di caratteristiche (che è noto per essere NP-completo). Quindi, è necessario cercare strategie non ottimali e computazionalmente efficienti. Vedi ad esempio Metodi di ricerca mobile nella selezione delle caratteristiche di Pudil et. al.
Nel metodo Forward si inizia con un modello vuoto e si itera su tutte le funzionalità. Per ogni caratteristica si addestra un modello e si seleziona la caratteristica che produce il modello migliore in base alla metrica. In modo simile si procede aggiungendo la funzionalità successiva che produce il miglior miglioramento se combinata con quelle già selezionate.
Nel metodo allindietro è sufficiente invertire la procedura: iniziare con tutte le funzionalità e rimuovere iterativamente quella la cui rimozione ha danneggiato meno le prestazioni o porta al miglioramento maggiore.
Commenti
- Grazie per la risposta jpmuc! Tuttavia, non sono sicuro che questo risponda alla mia domanda originale, che era: " Con quale modello inizia la selezione avanti-indietro? " Mi manca qualcosa nella tua risposta o volevi solo chiarire la procedura di selezione avanti-indietro in generale?
- In questo metodo di selezione delle funzionalità non sei vincolato a un modello concreto oa un insieme di parametri. Seleziona linsieme di caratteristiche con cui puoi costruire il miglior modello di un particolare tipo (nel tuo caso un modello lineare). Questo è illustrato meglio in questi due link: stat.columbia.edu/~martin/W2024/R10.pdf e rstudio-pubs-static.s3.amazonaws.com/ …
object
&scope
argomenti per iniziare con il modello che desideri:stepAIC(lm(y~1, data), scope=~x1+x2+x3+x4+x5, direction = "both")
. Non ' Per sapere se ' è una risposta autorevole sul fatto che " forward-backward " implichi un particolare modello di partenza o quale; ma anche se cè, ' sarebbe ragionevole non presumere che altre persone lo sappiano quando usano lespressione.