J'ai un ensemble de données d'environ 5000 fonctionnalités. Pour ces données, j'ai d'abord utilisé le test du chi carré pour la sélection des fonctionnalités; après cela, j'ai obtenu environ 1500 variables qui ont montré une relation de signification avec la variable de réponse.
Maintenant, je dois ajuster la régression logistique là-dessus. J'utilise le package glmulti pour R (le package glmulti fournit une sélection de sous-ensemble efficace pour vlm) mais il ne peut utiliser que 30 fonctionnalités à la fois, sinon ses performances diminuent car le nombre de lignes de mon ensemble de données est d'environ 20000.
Existe-t-il une autre approche ou technique pour résoudre les problèmes ci-dessus? Si je passe par la méthode ci-dessus, cela prendra trop de temps pour s'adapter au modèle.
sklearn
'sLogisticRegression
et il résout un problème de 4000 fonctionnalités, 20 000 lignes en environ une minute sur mon ordinateur portable.Réponses:
Il n'est pas approprié de faire un filtrage des fonctionnalités, puis d'introduire les fonctionnalités survivantes dans une méthode qui ne comprend pas la quantité de données torturée précédemment. Il est préférable d'utiliser une méthode capable de gérer toutes les fonctionnalités potentielles (par exemple, un filet élastique). D'autres suggestions sur l'utilisation de la réduction des données sont également d'excellentes idées.
la source
Une première approche consiste à utiliser l'ACP afin de réduire la dimensionnalité de l'ensemble de données. Essayez de conserver ~ 97% de la variance totale, cela peut aider un peu.
Une autre option consiste à utiliser quelque chose comme la descente de gradient stochastique, cela peut être un algorithme beaucoup plus rapide et capable de s'insérer dans la mémoire de R.
EDIT: Un problème avec R est que vous ne pouvez utiliser que votre RAM, donc si vous n'avez que 8 Go de mémoire, c'est à cela que vous êtes limité. J'ai rencontré de nombreux problèmes avec cela et je suis depuis passé à utiliser scikit-learn de python qui semble gérer beaucoup mieux les plus grands ensembles de données.
Un très joli graphique qui donne une idée des endroits où commencer en fonction de la taille de votre ensemble de données peut être trouvé ici: http://3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg
la source
Comme @Frank Harrell l'a déjà mentionné, l'utilisation d'un filet élastique ou de LASSO pour effectuer une régression pénalisée avec toutes les 5000 fonctionnalités ( p ) serait un bon début pour la sélection des fonctionnalités (on ne peut pas simplement supprimer 3500 variables car elles ne sont pas "statistiquement significatives" avec le variable d’intérêt dépendante). Chacune de ces méthodes peut être effectuée en utilisant l'ensemble de R,
glmnet
.Afin de prendre en compte les relations partagées entre les variables prédictives potentielles d'intérêt ( p = 5000), je recommanderais d'exécuter une forêt aléatoire en utilisant le
randomForest
package et / ou un boost de gradient en utilisant legbm
package pour évaluer l'importance relative des variables prédictives potentielles en ce qui concerne le résultat binaire. Avec ces informations, vous serez beaucoup plus préparé à construire un modèle de régression logistique plus parcimonieux.la source
Je suppose que vous n'êtes pas limité à R, car c'est un problème de big data que vous ne devriez probablement pas être. Vous pouvez essayer MLlib , qui est la bibliothèque évolutive d'apprentissage automatique d'Apache Spark.
Apache Spark , quant à lui, est un moteur rapide et général pour le traitement de données à grande échelle en mémoire. Ceux-ci fonctionnent sur une infrastructure Hadoop qui permet le traitement distribué de grands ensembles de données sur des clusters d'ordinateurs à l'aide de modèles de programmation simples. Il est conçu pour passer de serveurs uniques à des milliers de machines, chacune offrant un calcul et un stockage locaux.
Notez que «des milliers de machines» est facultatif (!), Vous pouvez également le configurer sur votre bureau local / professionnel.
Pour en revenir à MLlib, il est livré avec les algorithmes ci-dessous prêts à l'emploi:
Si vous travaillez régulièrement avec des mégadonnées, vous devrez peut-être adopter une solution Hadoop.
la source
Vous pouvez essayer Vowpal Wabbit: Vowpal Wabbit . Cela fonctionne bien avec de très grands ensembles de données et un très grand nombre de fonctionnalités.
selon le site:
la source