Snažím se porozumět logice, která stojí za výběrem vpřed-vzad (i když vím, že pro výběr modelu existují lepší metody). Při výběru modelu vpřed je proces výběru spuštěn s prázdným modelem a proměnné jsou přidávány postupně. Při zpětném výběru je proces výběru spuštěn s úplným modelem a proměnné jsou postupně vylučovány.
Otázka: S jakým modelem začíná dopředu-dozadu výběr?
Je to celý model? Prázdný model? Něco mezi tím? Wikipedia a Hastie a kol. (2009) – Prvky statistického učení, strana 60 vysvětlují metodu, ale nebyl jsem schopen najít nic o výchozím modelu. Pro svou analýzu používám funkci stepAIC
balíčku R
MASS
.
UPDATE:
Níže naleznete příklad v R
. Funkce stepAIC automaticky vytiskne každý krok procesu výběru v konzole a zdá se, že výběr začíná u celého modelu. Na základě odpovědi jjet si však nejsem jistý, jestli jsem udělal něco špatně.
# 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")
Komentáře
Odpovědět
Věřím, že výběr „vpřed-vzad“ je jiný název pro výběr „vpřed-po krocích“. Toto je výchozí přístup používaný stepAIC. V tomto postupu začínáte s prázdným modelem a vytváříte postupně stejně jako v předním výběru. Jedinou výhradou je, že pokaždé, když přidáte novou proměnnou $ X_ {new} $, musíte zkontrolovat, zda by po zahrnutí $ X_ {new} $ měla být zrušena některá z dalších proměnných, které jsou již v modelu. . V tomto přístupu můžete nakonec hledat „nelineárně“ ve všech různých modelech.
——– EDIT ——–
následující R kód ilustruje rozdíl mezi třemi strategiemi výběru:
# 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))
V tomto kódu jsem váš příklad jen mírně upravil. Nejprve jsem nastavil seed tak, že můžete vidět stejná data, která jsem použil. Také jsem zmenšil N, takže algoritmus běží trochu rychleji. Všechny vaše proměnné jsem ponechal stejné, kromě x6. x6 je nyní nejpředvídatelnější pro y jednotlivě – díky tomu bude první proměnná zvolená při výběru vpřed a po krocích. Jakmile ale do modelu vstoupí x1, x2 a x3, os x6 bude nezávislá na y a měla by být vyloučena. Uvidíte, že to vpřed dělá přesně to. Začíná to na x6, pokračuje tak, že zahrnuje x1, x2 a x3, pak se vrací a upustí x6 a končí. Pokud použijete pouze vpřed, pak x6 zůstane v modelu, protože algoritmus se nikdy nevrátí k tomuto druhu kontroly multicollinearity.
Komentáře
- Děkuji ty za odpověď jjet! Dává to naprosto smysl, co říkáte, ale pokud spustíte kód, který jsem aktualizoval výše, vypadá to, že výběr začíná úplným modelem. Udělal jsem něco špatně?
- Jen malý problém s vaším kódem. Napsali jste mod < – lm (y ~., Data) následovaný stepAIC (mod, direction = " both "). V prvním řádku jste ' efektivně definovali počáteční model tak, aby zahrnoval všechny proměnné, a to tak, že napíšete " y ~. ". Toto je nyní váš výchozí bod pro výběr vpřed. Místo toho ' budete chtít napsat " y ~ 1 " což je pouze intercept model – výchozí bod, který ' hledáte. ' Provedl jsem výše úpravy pomocí kódu R, který by vám to měl vyčistit.
- Děkuji vám za skvělou pomoc!Jedna poslední otázka: Pokud ponechám svůj příklad, jako by byl, bez argumentu oboru as
mod <- lm(y ~., data)
, provádí normální zpětný výběr nebo provádí dopředný výběr s plný startovací model? - Ten druhý. ' provádí dopředu a dozadu pomocí počátečního modelu, který zahrnuje všechny proměnné. Pokud ' nemáte definovaný seznam oborů, předpokládá se vaše " nižší " model je jakýkoli model, který jste původně zadali, a váš " horní " model je úplný model.
Odpověď
Forward-backward selection model are two chamtivý přístup k řešení problému kombinatorické optimalizace hledání optimální kombinace funkcí (o kterém je známo, že je NP-kompletní). Proto musíte hledat neoptimální, výpočetně efektivní strategie. Viz například Plovoucí metody vyhledávání ve výběru funkcí od Pudila et. al.
V metodě Forward začínáte s prázdným modelem a iterujete všechny funkce. Pro každý prvek trénujete model a vyberete prvek, který poskytuje nejlepší model podle vaší metriky. Podobným způsobem postupujete přidáním další funkce, která přináší nejlepší zlepšení v kombinaci s již vybranými.
Při zpětné metodě stačí invertovat postup: začněte se všemi funkcemi a iterativně ji odeberte jehož odstranění nejméně poškodilo výkon nebo vedlo k největšímu zlepšení.
Komentáře
- Děkujeme za odpověď jpmuc! Nejsem si však jistý, jestli to odpovídá na mou původní otázku, která byla: " S jakým modelem začíná výběr vpřed-vzad? " Chybí mi ve vaší odpovědi něco, nebo jste jen chtěli vyjasnit obecně postup dopředu a dozadu?
- V této metodě výběru funkcí nejste vázáni na konkrétní model nebo sadu parametrů. Vyberete sadu funkcí, pomocí kterých můžete vytvořit nejlepší model konkrétního typu (ve vašem případě lineární model). To lépe ilustrují tyto dva odkazy: stat.columbia.edu/~martin/W2024/R10.pdf a rstudio-pubs-static.s3.amazonaws.com/ …
object
&scope
argumenty, které můžete začít u libovolného modelu, který chcete:stepAIC(lm(y~1, data), scope=~x1+x2+x3+x4+x5, direction = "both")
. / div> Nevím, jestli existuje ' má autoritativní odpověď na to, zda " vpřed-vzad " implikuje konkrétní výchozí model, nebo který; ale i když existuje, je ' d rozumné nepředpokládat, že o tom ostatní lidé vědí, když použijí výraz.