Yritän ymmärtää eteenpäin-taaksepäin valinnan logiikkaa (vaikka tiedänkin, että mallin valintaan on parempia tapoja). Malli eteenpäin -valinnassa valintaprosessi aloitetaan tyhjällä mallilla ja muuttujat lisätään peräkkäin. Taaksepäin valinnassa valintaprosessi aloitetaan täydellä mallilla ja muuttujat suljetaan pois peräkkäin.
Kysymys: Millä mallilla eteenpäin-taaksepäin valinta alkaa?
Onko se koko malli? Tyhjä malli? Jotain välissä? Wikipedia ja Hastie ym. (2009) – Tilastollisen oppimisen elementit, sivu 60 selittävät menetelmää, mutta en löytänyt mitään lähtömallista. Analyysissani käytän funktiota stepAIC
R
-paketista MASS
.
UPDATE:
Alla on esimerkki kohdasta R
. StepAIC-funktio tulostaa jokaisen vaiheen automaattisesti valintaprosessista konsolissa ja näyttää siltä, että valinta alkaa täydellä mallilla. En kuitenkaan ole varma jjetin vastauksen perusteella, olenko tehnyt mitään väärää.
# 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")
kommentit
Vastaa
Uskon, että ”eteenpäin-taaksepäin” -valinta on toinen nimi ”eteenpäin-vaiheittain” -valinnalle. Tämä on stepAIC: n käyttämä oletustapa. Tässä menettelyssä aloitat tyhjällä mallilla ja rakennat peräkkäin aivan kuten eteenpäin valinnassa. Ainoa huomautus on, että aina kun lisäät uuden muuttujan, $ X_ {new} $, sinun on tarkistettava, onko jokin muu mallissa jo oleva muuttuja pudotettava sen jälkeen, kun $ X_ {new} $ on sisällytetty . Tässä lähestymistavassa voit päätyä etsimään ”epälineaarisesti” kaikista eri malleista.
——– MUOKKAA ——–
seuraava R-koodi kuvaa eroa kolmen valintastrategian välillä:
# 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))
Olen muokannut esimerkkiäsi vain vähän tässä koodissa. Ensin asetin siemen niin että näet samat tiedot kuin mitä käytin. Tein myös N pienemmäksi, joten algoritmi toimii hieman nopeammin. Pidin kaikki muuttujat samat paitsi x6. x6 on nyt y: n ennustava yksittäin – tämä tekee siitä ensimmäisen muuttuja, joka valitaan eteenpäin ja eteenpäin-askelittain. Mutta kun x1, x2 ja x3 tulevat malliin, x6 tulee itsenäiseksi y: stä ja se tulisi sulkea pois. Näet, että eteenpäin-askel tekee juuri tämän. Se alkaa x6: lla, jatkuu sisältäen x1, x2 ja x3, sitten palaa takaisin ja pudottaa x6: n ja päättyy. Jos käytät vain eteenpäin, x6 pysyy mallissa, koska algoritmi ei koskaan palaa tällaiseen monikollinaarisuuden tarkistukseen.
Kommentit
- Kiitos sinulle vastauksestasi jjet! Se on täysin järkevää, mitä sanot, mutta jos suoritat yllä päivitetyn koodin, näyttää siltä, että valinta alkaa täydellä mallilla. Olenko tehnyt jotain väärin?
- Vain pieni ongelma koodissasi. Kirjoitit mod < – lm (y ~., Data) ja sen jälkeen stepAIC (mod, direction = " molemmat "). Ensimmäisellä rivillä ' olet määrittänyt tehokkaasti alkuperäisen mallin sisällyttämään kaikki muuttujat kirjoittamalla " y ~. ". Tämä on nyt lähtökohta eteenpäin valintaan. Sen sijaan ' haluat kirjoittaa " y ~ 1 ", joka on vain sieppausmalli – aloituskohta, jota ' etsit. Olen ' tehnyt yllä olevia muutoksia R-koodilla, jonka pitäisi selvittää tämä sinulle.
- Kiitos paljon suuresta avusta!Viimeinen kysymys: Jos pidän esimerkkini sellaisena kuin se on ilman laajuusargumenttia ja
mod <- lm(y ~., data)
-toiminnon kanssa, suorittaako se sitten normaalia taaksepäin valintaa vai suorittaako se eteenpäin-taaksepäin valinnan täydellinen lähtömalli? - jälkimmäinen. Se ' tekee eteenpäin taaksepäin käyttämällä alkuperäistä mallia, joka sisältää kaikki muuttujat. Jos sinulla ' ei ole määritelty laajuusluetteloa, se olettaa " alemman " malli on mikä tahansa malli, jonka olet määrittänyt alun perin, ja " ylempi " malli on koko malli.
vastaus
Eteen- ja taaksepäin mallin valinta on kaksi ahne lähestymistapa ratkaisemaan kombinatorinen optimointiongelma, joka koskee ominaisuuksien optimaalisen yhdistelmän löytämistä (jonka tiedetään olevan NP-täydellinen). Siksi sinun on etsittävä epäoptimaalisia, laskennallisesti tehokkaita strategioita. Katso esimerkiksi Kelluvat hakumenetelmät ominaisuuksien valinnassa , kirjoittanut Pudil et. al.
Forward-menetelmässä aloitat tyhjällä mallilla ja toistat kaikki ominaisuudet. Koulutat mallin jokaiselle ominaisuudelle ja valitse ominaisuus, joka tuottaa parhaan mallisi mittarisi mukaan. Samalla tavalla jatkat lisäämällä seuraavan ominaisuuden, joka tuottaa parhaan parannuksen yhdistettynä jo valittuihin ominaisuuksiin.
Taaksepäin -menetelmässä vain käännät menettelyn: aloita kaikista ominaisuuksista ja poista se iteratiivisesti jonka poistaminen vahingoitti suorituskykyä vähiten tai johtaa suurimpaan parannukseen.
Kommentit
- Kiitos vastauksestasi jpmuc! En kuitenkaan ole varma, vastaako tämä alkuperäiseen kysymykseeni, joka oli: " Millä mallilla eteenpäin-taaksepäin valinta alkaa? " Puuttuuko jotain vastauksestasi vai halusitko vain selventää eteenpäin-taaksepäin valinnan menettelyä yleensä?
- Tässä ominaisuuden valintamenetelmässä et ole sidottu konkreettiseen malliin tai parametrijoukkoon. Valitset joukon ominaisuuksia, joilla voit rakentaa parhaan tietyn tyyppisen mallin (sinun tapauksessasi lineaarisen mallin). Tätä kuvaa paremmin nämä kaksi linkkiä: stat.columbia.edu/~martin/W2024/R10.pdf ja rstudio-pubs-static.s3.amazonaws.com/ …
object
&scope
argumentit aloittaaksesi haluamallasi mallilla:stepAIC(lm(y~1, data), scope=~x1+x2+x3+x4+x5, direction = "both")
. En ' t tiedä onko ' s arvovaltainen vastaus siihen, tarkoittaako " eteenpäin-taaksepäin " tiettyä lähtömallia vai mikä; mutta vaikka niin onkin, on ' järkevää olla ajattelematta, että muut ihmiset tietävät siitä, kun he käyttävät lauseketta.