Supposons que vous analysez un énorme ensemble de données à hauteur de milliards d'observations par jour, où chaque observation comporte quelques milliers de variables numériques et catégorielles éparses et peut-être redondantes. Disons qu'il y a un problème de régression, un problème de classification binaire déséquilibré et une tâche de «découvrir quels prédicteurs sont les plus importants». Ma réflexion sur la façon d'aborder le problème est:
Ajuster un modèle prédictif sur des sous-échantillons de plus en plus grands (aléatoires) des données jusqu'à ce que:
L'ajustement et la validation croisée du modèle deviennent difficiles sur le plan du calcul (par exemple, trop déraisonnablement lent sur mon ordinateur portable, R manque de mémoire, etc.), OU
Les valeurs RMSE d'entraînement et de test ou de précision / rappel se stabilisent.
Si les erreurs d'apprentissage et de test ne se sont pas stabilisées (1.), utilisez un modèle plus simple et / ou implémentez des versions multicœurs ou multinœuds du modèle et redémarrez depuis le début.
Si les erreurs de formation et de test se sont stabilisées (2.):
Si (c'est-à-dire que je peux toujours exécuter des algorithmes sur X s u b s e t car il n'est pas encore trop grand), essayez d'améliorer les performances en étendant l'espace des fonctionnalités ou en utilisant un modèle plus complexe et redémarrage depuis le début.
Si est «grand» et que la poursuite des analyses est coûteuse, analysez l'importance variable et terminez.
Je prévois d'utiliser des paquets comme biglm
, speedglm
, multicore
et ff
dans un premier temps R, et utiliser plus tard des algorithmes plus complexes et / ou multi - noeuds (sur EC2) si nécessaire.
Cela vous semble-t-il une approche raisonnable et, dans l'affirmative, avez-vous des conseils ou des suggestions spécifiques? Sinon, qu'essaieriez-vous à la place pour un ensemble de données de cette taille?
la source
Réponses:
Vous devriez vérifier les méthodes de régression et de classification en ligne pour les ensembles de données de cette taille. Ces approches vous permettraient d'utiliser l'ensemble de données sans avoir à le charger en mémoire.
Vous pouvez également consulter Vowpal Wabbit (VW):
https://github.com/JohnLangford/vowpal_wabbit/wiki
Il utilise une méthode en ligne hors du noyau, il devrait donc être capable de gérer un ensemble de données de cette taille. Vous pouvez effectuer une régression et une classification et il prend en charge les formats clairsemés. Vous pouvez également effectuer des versions pénalisées (par exemple, régression / classification de type lasso) dans VW, ce qui pourrait améliorer la précision de votre modèle.
la source
Je suggère d'utiliser Hadoop et RMR (un package spécifique pour Map Reduce dans R). Avec cette stratégie, vous pouvez exécuter de grands ensembles de données sur des ordinateurs de base avec une configuration abordable (probablement en deux heures, vous obtenez à la fois Hadoop et RMR (RHadoop) installés et exécutés).
En fait, si vous disposez de plusieurs ordinateurs, vous pouvez créer un cluster, ce qui réduit le temps de traitement.
Je vous donne quelques liens soutenant ma suggestion:
Donc, mon conseil est de suivre ces directives car cela vaut certainement la peine si vos données sont énormes.
la source
C'est plus un commentaire qu'une réponse, mais je ne peux pas le poster en tant que commentaire (nécessite 50 répétitions) ..
Avez-vous essayé d'utiliser PCA sur votre jeu de données? Il peut vous aider à réduire l'espace variable et à trouver une direction possible sur laquelle la variable doit être exclue de votre modèle de régression. Ce faisant, le modèle sera plus facile à calculer. Vous trouverez ici une discussion intéressante sur l'utilisation de l'ACP avec des variables catégorielles: l' analyse des composants principaux peut-elle être appliquée à des ensembles de données contenant un mélange de variables continues et catégorielles?
De plus, j'imagine que vous utilisez R pour de nombreuses raisons (j'utilise aussi R), mais il peut être plus facile d'utiliser un logiciel comme SAS ou STATA. Ils fonctionnent mieux avec les mégadonnées et vous n'avez pas à gérer l'informatique multicœur et parallèle.
Enfin, essayez de penser s'il est judicieux d'utiliser autant de lignes que possible de votre ensemble de données. Il s'agit d'un ensemble de données de population, d'un ensemble de données de quasi-population ou d'un ensemble de données échantillonné? Vous pouvez obtenir de meilleurs résultats avec un bon échantillonnage sur votre ensemble de données que d'utiliser l'ensemble des données. Jetez un coup d'œil à ce billet: l' échantillonnage est-il pertinent à l'heure du «big data»?
J'espère que cela t'aides
la source