Încerc să înțeleg logica din spatele selecției înainte-înapoi (chiar dacă știu că există metode mai bune pentru selecția modelului). În selecția modelului înainte, procesul de selecție este început cu un model gol și variabilele sunt adăugate secvențial. În selecția inversă, procesul de selecție este început cu modelul complet și variabilele sunt excluse secvențial.
Întrebare: Cu ce model începe selecția înainte-înapoi?
Este modelul complet? Modelul gol? Ceva între ele? Wikipedia și Hastie și colab. (2009) – Elementele învățării statistice, pagina 60 explică metoda, dar nu am putut găsi nimic despre modelul de pornire. Pentru analiza mea folosesc funcția stepAIC
al R
pachet MASS
.
UPDATE:
Mai jos puteți găsi un exemplu în R
. Funcția stepAIC tipărește automat fiecare pas procesului de selecție în consolă și se pare că selecția începe cu modelul complet. Cu toate acestea, pe baza răspunsului jjet nu sunt sigur dacă am făcut ceva greșit.
# 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")
Comentarii
Răspuns
Cred că selecția „înainte-înapoi” este un alt nume pentru selecția „înainte-în-trepte”. Aceasta este abordarea implicită utilizată de stepAIC. În această procedură, începeți cu un model gol și creați secvențial la fel ca în selecția înainte. Singura avertisment este că de fiecare dată când adăugați o nouă variabilă, $ X_ {new} $, trebuie să verificați dacă oricare dintre celelalte variabile care sunt deja în model ar trebui să fie abandonată după ce $ X_ {new} $ este inclus . În această abordare, puteți ajunge să căutați „neliniar” prin toate modelele diferite.
——– EDIT ——–
următorul cod R ilustrează diferența dintre cele trei strategii de selecție:
# 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))
Ți-am modificat ușor exemplul în acest cod. Mai întâi, am setat un seed astfel că puteți vedea aceleași date pe care le-am folosit. Am făcut și N mai mic, astfel încât algoritmul să ruleze puțin mai repede. Am păstrat toate variabilele la fel, cu excepția x6. x6 este acum cel mai predictiv dintre y individual – acest lucru îl va face primul variabilă aleasă în selecția înainte și în pas. Dar odată ce x1, x2 și x3 intră în model, x6 devine independent de y și ar trebui exclus. Veți vedea că în pas înainte face exact acest lucru. Începe cu x6, continuă să includă x1, x2 și x3, apoi se întoarce și scade x6 și se termină. Dacă pur și simplu folosiți înainte, atunci x6 va rămâne în model, deoarece algoritmul nu revine niciodată la acest tip de verificare multicoliniară.
Comentarii
- Vă mulțumim tu pentru răspunsul tău jjet! Este perfect logic ceea ce spuneți, dar dacă rulați codul pe care l-am actualizat mai sus, se pare că selecția începe cu modelul complet. Am greșit ceva?
- Doar o ușoară problemă cu codul dvs. Ați scris mod < – lm (y ~., Date) urmat de stepAIC (mod, direction = " ambele "). În prima dvs. linie, ' ați definit efectiv un model inițial pentru a include toate variabilele, scriind " y ~. ". Acesta este acum punctul dvs. de plecare pentru selecția înainte. În schimb, ' veți dori să scrieți " y ~ 1 " care este doar un model de interceptare – punctul de plecare pe care îl căutați '. Am ' am făcut editări de mai sus cu codul R, care ar trebui să vă clarifice acest lucru.
- Vă mulțumesc foarte mult pentru mare ajutor!O ultimă întrebare: Dacă îmi păstrez exemplul ca și cum ar fi fără argumentul scopului și cu
mod <- lm(y ~., data)
, efectuează o selecție normală înapoi sau efectuează o selecție înainte-înapoi cu un model de pornire complet? - Acesta din urmă. ' se desfășoară înainte-înapoi utilizând un model inițial care include toate variabilele. Dacă nu aveți ' lista de scopuri definită, aceasta va presupune " " modelul este modelul pe care l-ați specificat inițial și modelul dvs. " superior " este modelul complet.
Răspuns
Selecția modelului înainte-înapoi sunt două abordări lacome pentru a rezolva problema de optimizare combinatorie a găsirii combinației optime de caracteristici (despre care se știe că este NP-complet). Prin urmare, trebuie să căutați strategii suboptimale, eficiente din punct de vedere al calculului. Vedeți, de exemplu, Metode de căutare plutitoare în selectarea caracteristicilor de către Pudil et. al.
În metoda Forward începeți cu un model gol și repetați toate caracteristicile. Pentru fiecare caracteristică instruiți un model și selectați caracteristica care produce cel mai bun model în funcție de valoarea dvs. În mod similar, procedați adăugând următoarea caracteristică care oferă cea mai bună îmbunătățire atunci când este combinată cu cele deja selectate.
În metoda inversă, doar inversați procedura: începeți cu toate caracteristicile și eliminați-o iterativ. a cărui eliminare afectează cel mai puțin performanța sau duce la cea mai mare îmbunătățire.
Comentarii
- Vă mulțumim pentru răspunsul dvs. jpmuc! Cu toate acestea, nu sunt sigur dacă acest lucru răspunde la întrebarea mea inițială, care era: " Cu ce model începe selecția înainte-înapoi? " Îmi lipsește ceva în răspunsul dvs. sau doriți doar să clarificați procedura de selecție înainte-înapoi în general?
- În această metodă de selecție a caracteristicilor nu sunteți legat de un model concret sau de un set de parametri. Selectați setul de caracteristici cu care puteți construi cel mai bun model de un anumit tip (în cazul dvs. un model liniar). Acest lucru este mai bine ilustrat în aceste două linkuri: stat.columbia.edu/~martin/W2024/R10.pdf și rstudio-pubs-static.s3.amazonaws.com/ …
object
&scope
argumente pentru a începe cu oricare model doriți:stepAIC(lm(y~1, data), scope=~x1+x2+x3+x4+x5, direction = "both")
. Nu ' nu știu dacă există ' este un răspuns autoritar dacă " înainte-înapoi " implică un anumit model de pornire sau care; dar chiar dacă există, ' ar fi logic să nu presupunem că alte persoane știu despre asta atunci când folosesc expresia.