Jessaie de comprendre la logique derrière la sélection avant-arrière (même si je sais quil existe de meilleures méthodes pour la sélection de modèles). Dans la sélection de modèle avant, le processus de sélection est lancé avec un modèle vide et les variables sont ajoutées séquentiellement. Dans la sélection arrière, le processus de sélection commence avec le modèle complet et les variables sont exclues séquentiellement.
Question: Avec quel modèle commence la sélection avant-arrière?
Sagit-il du modèle complet? Le modèle vide? Quelque chose entre les deux? Wikipédia et Hastie et al. (2009) – Les éléments de lapprentissage statistique, page 60 expliquent la méthode, mais je nai rien trouvé sur le modèle de départ. Pour mon analyse, jutilise la fonction stepAIC
du package R
MASS
.
UPDATE:
Vous trouverez ci-dessous un exemple dans R
. La fonction stepAIC imprime automatiquement chaque étape du processus de sélection dans la console et il semble que la sélection commence par le modèle complet. Cependant, daprès la réponse de jjet, je ne suis pas sûr davoir fait quelque chose de mal.
# 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")
Commentaires
Réponse
Je crois que la sélection « avant-arrière » est un autre nom pour la sélection « avant-pas ». Il sagit de lapproche par défaut utilisée par stepAIC. Dans cette procédure, vous commencez avec un modèle vide et vous construisez séquentiellement, comme dans la sélection directe. La seule mise en garde est que chaque fois que vous ajoutez une nouvelle variable, $ X_ {new} $, vous devez vérifier si lune des autres variables qui sont déjà dans le modèle doit être supprimée après que $ X_ {new} $ est inclus . Dans cette approche, vous pouvez finir par rechercher « non linéairement » dans tous les différents modèles.
——– EDIT ——–
Le Le code R suivant illustre la différence entre les trois stratégies de sélection:
# 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))
Jai « légèrement modifié votre exemple dans ce code. Dabord, jai défini une graine pour que vous pouvez voir les mêmes données que jai utilisées. Jai également réduit N plus petit pour que lalgorithme sexécute un peu plus vite. Jai gardé toutes vos variables identiques sauf pour x6. x6 est maintenant le plus prédictif de y individuellement – cela en fera le premier variable choisie dans la sélection par étapes en avant et en avant. Mais une fois que x1, x2 et x3 entrent dans le modèle, x6 devient indépendant de y et doit être exclu. Vous verrez que le pas en avant fait exactement cela. Il commence par x6, continue à inclure x1, x2 et x3, puis il revient et abandonne x6 et se termine. Si vous utilisez simplement forward, alors x6 restera dans le modèle car lalgorithme ne revient jamais à ce type de contrôle de multicollinéarité.
Commentaires
- Merci vous pour votre réponse jjet! Ce que vous dites est parfaitement logique, mais si vous exécutez le code que jai mis à jour ci-dessus, il semble que la sélection commence par le modèle complet. Ai-je fait quelque chose de mal?
- Juste un petit problème avec votre code. Vous avez écrit mod < – lm (y ~., Data) suivi de stepAIC (mod, direction = " les deux "). Dans votre première ligne, vous ' avez effectivement défini un modèle initial pour inclure toutes les variables en écrivant " y ~. ". Cest maintenant votre point de départ pour la sélection avant. Au lieu de cela, vous ' voudrez écrire " y ~ 1 " qui est juste un modèle dinterception – le point de départ que vous ' recherchez. Jai ' apporté des modifications ci-dessus avec le code R qui devrait clarifier cela pour vous.
- Merci beaucoup pour votre aide!Une dernière question: si je garde mon exemple tel quel sans largument scope et avec
mod <- lm(y ~., data)
, est-ce quil effectue une sélection normale en arrière ou est-ce quil effectue une sélection avant-arrière avec un modèle de départ complet? - Ce dernier. Il ' fait de lavant-arrière en utilisant un modèle initial qui inclut toutes les variables. Si vous navez ' que la liste des étendues définie, cela supposera que votre " inférieur " model est le modèle que vous avez spécifié initialement et votre modèle " supérieur " est le modèle complet.
Réponse
La sélection de modèle avant-arrière est deux approches gourmandes pour résoudre le problème doptimisation combinatoire consistant à trouver la combinaison optimale de caractéristiques (qui est connue pour être NP-complet). Par conséquent, vous devez rechercher des stratégies sous-optimales et efficaces en termes de calcul. Voir par exemple Méthodes de recherche flottantes dans la sélection des fonctionnalités par Pudil et. al.
Dans la méthode Forward, vous commencez avec un modèle vide et parcourez toutes les fonctionnalités. Pour chaque fonction, vous entraînez un modèle et sélectionnez la fonction qui produit le meilleur modèle en fonction de votre métrique. De la même manière, vous continuez en ajoutant la fonctionnalité suivante qui apporte la meilleure amélioration lorsquelle est combinée avec celles déjà sélectionnées.
Dans la méthode inverse, vous inversez simplement la procédure: commencez par toutes les fonctionnalités et supprimez-la de manière itérative dont la suppression nuit le moins aux performances, ou conduit à la plus grande amélioration.
Commentaires
- Merci pour votre réponse jpmuc! Cependant, je ne sais pas si cela répond à ma question initiale, qui était: " Avec quel modèle commence la sélection avant-arrière? " Est-ce que je manque quelque chose dans votre réponse ou voulez-vous simplement clarifier la procédure de sélection avant-arrière en général?
- Dans cette méthode de sélection de caractéristiques, vous nêtes pas lié à un modèle concret ou à un ensemble de paramètres. Vous sélectionnez lensemble de fonctionnalités avec lequel vous pouvez créer le meilleur modèle dun type particulier (dans votre cas, un modèle linéaire). Ceci est mieux illustré dans ces deux liens: stat.columbia.edu/~martin/W2024/R10.pdf et rstudio-pubs-static.s3.amazonaws.com/ …
object
&scope
arguments pour commencer avec le modèle de votre choix:stepAIC(lm(y~1, data), scope=~x1+x2+x3+x4+x5, direction = "both")
. Je ne ' t savoir sil y a ' est une réponse faisant autorité pour savoir si " avant-arrière " implique un modèle de départ particulier, ou lequel; mais même si cest le cas, il ' serait judicieux de ne pas supposer que dautres personnes sont au courant lorsquelles utilisent lexpression.