J'ai un ensemble de données de 22 Go. Je voudrais le traiter sur mon ordinateur portable. Bien sûr, je ne peux pas le charger en mémoire.
J'utilise beaucoup de sklearn mais pour des ensembles de données beaucoup plus petits.
Dans ces situations, l'approche classique devrait ressembler à quelque chose.
Lire uniquement une partie des données -> Entraîner partiellement votre estimateur -> supprimer les données -> lire une autre partie des données -> continuer à entraîner votre estimateur.
J'ai vu que certains algorithmes sklearn ont la méthode d'ajustement partiel qui devrait nous permettre de former l'estimateur avec divers sous-échantillons des données.
Maintenant, je me demande s'il y a une raison simple de faire ça en sklearn? Je cherche quelque chose comme
r = read_part_of_data('data.csv')
m = sk.my_model
`for i in range(n):
x = r.read_next_chunk(20 lines)
m.partial_fit(x)
m.predict(new_x)
Peut-être que sklearn n'est pas le bon outil pour ce genre de choses? Faites le moi savoir.
Je pense que sklearn est bien pour des données plus volumineuses. Si vos algorithmes choisis prennent en charge partial_fit ou une approche d'apprentissage en ligne, vous êtes sur la bonne voie. Une chose à savoir est que la taille de votre morceau peut influencer votre succès.
Ce lien peut être utile ... Travailler avec des données volumineuses dans python et numpy, pas assez de RAM, comment enregistrer des résultats partiels sur le disque?
Je suis d'accord que h5py est utile mais vous voudrez peut-être utiliser des outils qui sont déjà dans votre carquois.
Une autre chose que vous pouvez faire est de choisir aléatoirement de conserver ou non une ligne dans votre fichier csv ... et d'enregistrer le résultat dans un fichier .npy pour qu'il se charge plus rapidement. De cette façon, vous obtenez un échantillon de vos données qui vous permettra de commencer à jouer avec tous les algorithmes ... et de traiter le plus gros problème de données en cours de route (ou pas du tout! Parfois, un échantillon avec une bonne approche est assez bon en fonction de ce que vous voulez).
J'ai utilisé plusieurs classificateurs scikit-learn avec des capacités hors noyau pour former des modèles linéaires: Gradient stochastique, Perceptron et Passive Agressive et également Multinomial Naive Bayes sur un ensemble de données Kaggle de plus de 30 Go. Tous ces classificateurs partagent la méthode partial_fit que vous mentionnez. Certains se comportent cependant mieux que d'autres.
Vous pouvez trouver la méthodologie, l'étude de cas et quelques bonnes ressources dans cet article: http://www.opendatascience.com/blog/riding-on-large-data-with-scikit-learn/ =
Vous voudrez peut-être jeter un œil à Dask ou Graphlab
Ils sont similaires à pandas mais travaillent sur des données à grande échelle (en utilisant des trames de données hors cœur). Le problème avec pandas est que toutes les données doivent rentrer dans Mémoire.
Les deux frameworks peuvent être utilisés avec scikit learn. Vous pouvez charger 22 Go de données dans Dask ou SFrame, puis les utiliser avec sklearn.
Je trouve intéressant que vous ayez choisi d'utiliser Python pour l'analyse statistique plutôt que R cependant, je commencerais par mettre mes données dans un format qui peut gérer de si grands ensembles de données. Le python h5py le package est fantastique pour ce type de stockage - permettant un accès très rapide à vos données. Vous devrez regrouper vos données dans des tailles raisonnables, disons 1 million de blocs d'éléments, par exemple 20 colonnes x 50 000 lignes écrivant chaque bloc dans le fichier H5. Ensuite, vous devez penser au type de modèle que vous utilisez - que vous n'avez pas vraiment spécifié.
Le fait est que vous devrez probablement écrire l'algorithme pour le modèle et la validation croisée d'apprentissage automatique car les données sont volumineuses. Commencez par écrire un algorithme pour résumer les données, afin que vous sachiez ce que vous regardez. Ensuite, une fois que vous aurez décidé du modèle à exécuter, vous devrez réfléchir à la validation croisée. Mettez une "colonne" dans chaque bloc de l'ensemble de données qui indique à quel ensemble de validation appartient chaque ligne. Beaucoup choisissent d'étiqueter chaque bloc dans un ensemble de validation particulier.
Ensuite, vous devrez écrire un algorithme de style de réduction de carte pour exécuter votre modèle sur les sous-ensembles de validation. L'alternative consiste simplement à exécuter des modèles sur chaque bloc de chaque ensemble de validation et à faire la moyenne du résultat (considérez la validité théorique de cette approche).
Pensez à utiliser spark, ou R et rhdf5 ou quelque chose de similaire. Je n'ai fourni aucun code car il s'agit d'un projet plutôt que d'une simple question de codage.