2017-09-02 2 views
1

J'essaye d'analyser le texte, mais la RAM de mon Mac est seulement 8 gigs, et le RidgeRegressor s'arrête juste après un moment avec Killed: 9. Je reconnais que c'est parce qu'il aurait besoin de plus de mémoire.Python - aller au-delà des limites de RAM?

Y at-il un moyen de désactiver le limiteur de taille de pile afin que l'algorithme puisse utiliser une sorte de mémoire d'échange?

+0

Jetez un oeil à cette question: https://stackoverflow.com/questions/17710748/process-large-data-in-python – nalyd88

+2

Copie possible de [Traiter de grandes données en python] (https://stackoverflow.com/questions/17710748/process-large-data-in-python) – nalyd88

Répondre

0

Vous devrez le faire manuellement.

Il y a probablement deux core-problèmes différents ici:

  • A: la tenue de vos données de formation
  • B: formation du régresseur

Pour A, vous pouvez essayer numpy de memmap qui résumés échangés. En guise d'alternative, envisagez de préparer vos données en HDF5 ou en DB. Pour HDF5, vous pouvez utiliser h5py ou pytables, tous deux autorisant une utilisation de type numpy.

Pour B: c'est une bonne idée d'utiliser un algorithme prêt à l'emploi. Dans scikit-learn, ce sont ceux qui supportent partial_fit.

Gardez à l'esprit que ce processus de formation se décompose en au moins deux nouveaux éléments:

  • être efficace en ce qui concerne la mémoire
    • Permutation est lent; vous ne voulez pas utiliser quelque chose qui détient N^2 aux-mémoire lors de l'apprentissage
  • convergence efficace

Ces algorithmes dans le lien ci-dessus doivent être d'accord pour les deux.

SGDRegressor peut être paramétré pour ressembler à RidgeRegression.

En outre: il peut être nécessaire d'utiliser manuellement partial_fit, en respectant les règles de l'algorithme (souvent une sorte de random-ordering nécessaire pour les preuves de convergence). Le problème avec l'échange abstrait est: si votre régresseur fait une permutation à chaque époque, sans savoir combien cela coûte, vous pourriez avoir des ennuis! Parce que le problème lui-même est assez difficile, certaines bibliothèques spéciales sont construites pour cela, tandis que sklearn a besoin de plus de travail manuel comme expliqué. L'un des plus extrêmes (beaucoup de trucs fous) pourrait être vowpal_wabbit (où IO est souvent le goulot d'étranglement!). Bien sûr, il existe d'autres bibliothèques populaires comme pyspark, servant un but légèrement différent (informatique distribuée).