Jag försöker förstå logiken bakom valet framåt (även om jag vet att det finns bättre metoder för modellval). Vid framåtvalsval startas urvalsprocessen med en tom modell och variabler läggs till sekventiellt. Vid bakåtval startas urvalsprocessen med hela modellen och variabler utesluts sekventiellt.
Fråga: Med vilken modell börjar valet framåt-bakåt?
Är det hela modellen? Den tomma modellen? Något däremellan? Wikipedia och Hastie et al. (2009) – Elementen för statistiskt lärande, sidan 60 förklarar metoden, men jag kunde inte hitta något om startmodellen. För min analys använder jag funktionen stepAIC
i R
-paketet MASS
.
UPDATE:
Nedan hittar du ett exempel i R
. StepAIC-funktionen skriver automatiskt ut varje steg urvalsprocessen i konsolen och det verkar som att valet börjar med hela modellen. Baserat på jjet-svaret är jag inte säker på om jag har gjort något fel.
# 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")
Kommentarer
Svar
Jag tror att ”framåt-bakåt” -val är ett annat namn för ”framåt-stegvis” val. Detta är standardmetoden som används av stepAIC. I den här proceduren börjar du med en tom modell och bygger upp sekventiellt precis som i valet framåt. Den enda varningen är att varje gång du lägger till en ny variabel, $ X_ {new} $, måste du kontrollera om någon av de andra variablerna som redan finns i modellen ska tappas efter att $ X_ {new} $ ingår. . I det här tillvägagångssättet kan du sluta söka ”icke-linjärt” genom alla de olika modellerna.
——– EDIT ——–
följande R-kod illustrerar skillnaden mellan de tre urvalsstrategierna:
# 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))
Jag har bara ändrat ditt exempel i den här koden. Först sätter jag ett frö så att du kan se samma data som jag använde. Jag gjorde också N mindre så att algoritmen går lite snabbare. Jag har hållit samma variabler förutom x6. x6 är nu den mest förutsägbara för y individuellt – detta gör det till det första variabel vald i steg framåt och framåt. Men när x1, x2 och x3 kommer in i modellen blir x6 oberoende av y och bör uteslutas. Du kommer att se att steg framåt gör exakt detta. Det börjar med x6, fortsätter att inkludera x1, x2 och x3, sedan går det tillbaka och tappar x6 och avslutas. Om du bara använder framåt så kommer x6 att stanna kvar i modellen eftersom algoritmen aldrig går tillbaka till den här typen av multikollinearitetskontroll.
Kommentarer
- Tack du för ditt svar jjet! Det är helt meningsfullt vad du säger, men om du kör koden som jag uppdaterade ovan verkar det som om valet börjar med hela modellen. Har jag gjort något fel?
- Bara ett litet problem med din kod. Du skrev mod < – lm (y ~., Data) följt av stepAIC (mod, direction = " båda "). På din första rad har du ' definierat en initial modell för att inkludera alla variabler genom att skriva " y ~. ". Detta är nu din startpunkt för framåtval. Istället vill du ' skriva " y ~ 1 " vilket bara är en avlyssningsmodell – startpunkten du ' du letar efter. Jag ' har gjort ändringar ovan med R-kod som borde rensa detta för dig.
- Tack så mycket för stor hjälp!En sista fråga: Om jag håller mitt exempel som om det är utan omfångsargumentet och med
mod <- lm(y ~., data)
, utför det då ett normalt bakåtval eller utför det ett bakåtval med ett full startmodell? - Den senare. Det ' gör framåt-bakåt med en initial modell som innehåller alla variabler. Om du inte ' inte har definierat omfattningslistan, antar det att din " lägre " modell är vilken modell du angav initialt och din " övre " -modellen är den fullständiga modellen.
Svar
Framåt-bakåt modellval är två giriga tillvägagångssätt för att lösa det kombinatoriska optimeringsproblemet för att hitta den optimala kombinationen av funktioner (vilket är känt för att vara NP-komplett). Därför måste du leta efter suboptimala, beräkningseffektiva strategier. Se till exempel Flytande sökmetoder i funktionsval av Pudil et. al.
I Forward-metoden börjar du med en tom modell och itererar över alla funktioner. För varje funktion tränar du en modell och väljer den funktion som ger den bästa modellen enligt ditt mått. På ett liknande sätt fortsätter du med att lägga till nästa funktion som ger bästa förbättring i kombination med de redan valda.
I bakåtgående metod inverterar du bara proceduren: börja med alla funktioner och ta iterativt bort den vars borttagning minst skadar prestanda eller leder till den största förbättringen.
Kommentarer
- Tack för ditt svar jpmuc! Jag är dock inte säker på om det här svarar på min ursprungliga fråga, som var: " Med vilken modell startar bakåtval? " Saknar jag något i ditt svar eller ville du bara klargöra proceduren för framåt-bakåtval i allmänhet?
- I denna funktionsvalsmetod är du inte bunden till en konkret modell eller uppsättning parametrar. Du väljer den uppsättning funktioner som du kan bygga den bästa modellen av en viss typ (i ditt fall en linjär modell). Detta illustreras bättre i dessa två länkar: stat.columbia.edu/~martin/W2024/R10.pdf och rstudio-pubs-static.s3.amazonaws.com/ …
object
&scope
argument för att börja med vilken modell du vill:stepAIC(lm(y~1, data), scope=~x1+x2+x3+x4+x5, direction = "both")
. Jag don ' t vet om det finns ' är ett auktoritärt svar på om " framåt-bakåt " innebär en viss startmodell, eller vilken; men även om det finns ' skulle det vara klokt att inte anta att andra känner till det när de använder uttrycket.