J'ai un ensemble de données avec environ 70 variables que j'aimerais réduire. Ce que je cherche à faire, c'est d'utiliser CV pour trouver les variables les plus utiles de la manière suivante.
1) Sélectionnez au hasard disons 20 variables.
2) Utilisez stepwise
/ LASSO
/ lars
/ etc pour choisir les variables les plus importantes.
3) Répétez ~ 50x et voyez quelles variables sont sélectionnées (pas éliminées) le plus fréquemment.
C'est dans le sens de ce que randomForest
ferait, mais le rfVarSel
package ne semble fonctionner que pour les facteurs / classification et j'ai besoin de prédire une variable dépendante continue.
J'utilise R donc toutes les suggestions seraient idéalement mises en œuvre là-bas.
Réponses:
Je crois que ce que vous décrivez est déjà implémenté dans le
caret
package. Regardez larfe
fonction ou la vignette ici: http://cran.r-project.org/web/packages/caret/vignettes/caretSelection.pdfMaintenant, cela dit, pourquoi avez-vous besoin de réduire le nombre de fonctionnalités? De 70 à 20, ce n'est pas vraiment un ordre de grandeur. Je pense que vous auriez besoin de plus de 70 fonctionnalités avant d'avoir une ferme conviction que certaines fonctionnalités n'ont vraiment pas d'importance. Mais là encore, c'est là qu'intervient un prieur subjectif, je suppose.
la source
Il n'y a aucune raison pour que la fréquence de sélection des variables fournisse des informations que vous n'avez pas déjà obtenues de l'importance apparente des variables dans le modèle initial. Il s'agit essentiellement d'une reprise de la signification statistique initiale. vous ajoutez également un nouveau niveau d'arbitraire lorsque vous essayez de décider d'un seuil de fréquence de sélection. Le rééchantillonnage de la sélection des variables est gravement endommagé par la colinéarité en plus des autres problèmes.
la source
J'ai révisé ma réponse plus tôt aujourd'hui. J'ai maintenant généré quelques exemples de données sur lesquelles exécuter le code. D'autres ont suggéré à juste titre que vous envisagiez d'utiliser le package caret, avec lequel je suis d'accord. Dans certains cas, cependant, vous pouvez trouver nécessaire d'écrire votre propre code. Ci-dessous, j'ai tenté de montrer comment utiliser la fonction sample () dans R pour assigner au hasard des observations aux plis de validation croisée. J'utilise également des boucles pour effectuer une présélection variable (en utilisant une régression linéaire univariée avec une valeur de coupure indulgente de 0,1) et une construction de modèle (en utilisant une régression pas à pas) sur les dix ensembles d'apprentissage. Vous pouvez ensuite écrire votre propre code pour appliquer les modèles résultants aux plis de validation. J'espère que cela t'aides!
Avant d'effectuer une validation croisée, il est important que vous preniez connaissance de son utilisation appropriée. Ces deux références offrent d'excellentes discussions sur la validation croisée:
Ces articles s'adressent aux biostatisticiens, mais seraient utiles à tous.
En outre, gardez toujours à l'esprit que l'utilisation de la régression pas à pas est dangereuse (bien que l'utilisation de la validation croisée devrait aider à atténuer le sur-ajustement). Une bonne discussion sur la régression pas à pas est disponible ici: http://www.stata.com/support/faqs/stat/stepwise.html .
Faites-moi savoir si vous avez des questions supplémentaires!
la source
Je viens de trouver quelque chose de sympa ici: http://cran.r-project.org/web/packages/Causata/vignettes/Causata-vignette.pdf
Essayez ceci peut-être lorsque vous utilisez le package glmnet
la source