Quelle est la manière la plus efficace de former des données en utilisant le moins de mémoire?

10

Voici mes données d'entraînement: 200 000 exemples x 10 000 fonctionnalités. Ma matrice de données d'entraînement est donc de - 200 000 x 10 000.

J'ai réussi à enregistrer cela dans un fichier plat sans avoir de problèmes de mémoire en enregistrant chaque ensemble de données un par un (un exemple après l'autre) pendant que je générais les fonctionnalités pour chaque exemple.

Mais maintenant, quand j'utilise Milk , SVM light ou tout autre algorithme d'apprentissage machine, tout essaie de charger toutes les données d'entraînement en mémoire au lieu de les entraîner une par une. Cependant, je n'ai que 8 Go de RAM, donc je ne peux pas procéder de cette façon.

Savez-vous de toute façon que je pourrais former l'algorithme un ensemble de données par un ensemble de données? C'est-à-dire que, à tout instant, je n'ai qu'un seul ensemble de données chargé en mémoire pendant l'entraînement.

madCode
la source
1
Qu'entendez-vous par «enregistrer chaque ensemble de données un par un»? Voulez-vous dire "chaque ligne de données?" Si vous avez plusieurs jeux de données que vous enregistrez un par un, pourquoi ne pas les charger un par un et adapter l'algorithme à chacun?
Zach
1
"Un ensemble de données par un ensemble de données" signifie-t-il ligne par ligne? C'est-à-dire un ensemble de données = 10000 fonctionnalités? Si tel est le cas, alors les algorithmes en ligne peuvent être quelque chose que vous recherchez, voir: en.wikipedia.org/wiki/Online_algorithm et en.wikipedia.org/wiki/Online_machine_learning . Il existe une version en ligne pour de nombreux algorithmes orientés machine, par exemple SVM et forêts aléatoires.
Herra Huu
Merci .. Zach et Herra. J'ai édité la question pour la définir un par un plus clairement. Et oui, je pensais à l'apprentissage en ligne, mais je n'ai jamais pensé aux algorithmes en ligne, permettez-moi de le lire et de l'essayer.
madCode

Réponses:

4

Je crois que le terme pour ce type d'apprentissage est un apprentissage hors du noyau . Une suggestion est vowpal wabbit , qui a une bibliothèque R pratique , ainsi que des bibliothèques pour de nombreuses autres langues.

Zach
la source
J'ai des problèmes de dépendances avec boost lors de son installation. avez-vous une idée de la raison pour laquelle je reçois cela? bit.ly/L939DO
madCode
@madCode Je n'ai jamais réellement utilisé vowpal wabbit, donc je ne peux pas vous aider à l'installer. J'ai entendu dire que leur liste de diffusion est excellente, et je suis sûr que vous pouvez y trouver de l'aide pour la configurer.
Zach
Hey..Zach. Cela a bien fonctionné. Je l'ai installé et me donne même des prédictions. merci :-)
madCode
1

J'appuie chaleureusement la suggestion de Zach. vowpal wabbit est une excellente option, et vous seriez surpris par sa vitesse. Un ensemble de données de 200k par 10k n'est pas considéré comme volumineux par les normes de vowpal wabbit.

vowpal_wabbit (disponible sous forme de source via https://github.com/JohnLangford/vowpal_wabbit , une ancienne version est disponible en tant que package standard dans l'univers Ubuntu) est un apprenant linéaire + bilinéaire en ligne rapide, avec une entrée très flexible. Vous pouvez mélanger des fonctionnalités binaires et numériques. Il n'est pas nécessaire de numéroter les fonctionnalités car les noms de variables fonctionneront "tels quels". Il a une tonne d'options, d'algorithmes, de réductions, de fonctions de perte et une grande flexibilité globale. Vous pouvez rejoindre la liste de diffusion (la trouver via github) et poser n'importe quelle question. La communauté est très compétente et solidaire.

arielf
la source
1

J'ai répondu à une question similaire ici . Le point est que la plupart des algorithmes d'apprentissage automatique / d'exploration de données sont des apprenants par lots, c'est-à-dire qu'ils chargent toutes les données en mémoire. Par conséquent, vous avez besoin d'outils différents pour les très grands ensembles de données que vous avez. Voir également les outils de ces questions.

L'apprentissage en ligne est un moyen de réduire l'empreinte mémoire des algorithmes.

Atilla Ozgur
la source