J'ai un grand (100K par 30K) et (très) jeu de données rares en format svmlight que je charge comme suit:implémentations Sparse d'apprendre scikit-calculs à distance en python/
import numpy as np
from scipy.cluster.vq import kmeans2
from scipy.spatial.distance import pdist, squareform
from sklearn.datasets import load_svmlight_file
X,Y = load_svmlight_file("somefile_svm.txt")
qui retourne une scipy clairsemée tableau X
Je dois simplement pour calculer les distances par paires de tous les points de formation comme
D = pdist(X)
Malheureusement, les implémentations de calcul de distance dans le travail de scipy.spatial.distance seulement pour les matrices denses. En raison de la taille de l'ensemble de données, il est impossible, disons, utilisez pdist comme
D = pdist(X.todense())
Les pointeurs vers des implémentations ou des solutions de contournement de calcul de distance de la matrice clairsemées en ce qui concerne ce problème seront grandement appréciés.
Un grand merci
Merci pour votre réponse. Au début, cela semblait être une solution à mon problème car "euclidean_distances" fonctionne avec des données éparses, mais même avec "D = euclidean_distances (X, X)", je reçois une erreur de mémoire insuffisante. – Nicholas
@Nicholas: 'euclidean_distances' renvoie nécessairement un tableau dense' X.shape [0] '×' X.shape [0] ', ce qui correspond à 1e10 dans votre cas. –
@Nicholas si vous voulez implémenter k-means sur un grand ensemble de données (dans la direction 'X.shape [0]'), vous devriez essayer la classe 'sklearn.cluster.MiniBatchKMeans'). Il traite l'ensemble d'entrée de façon incrémentielle par petites portions, d'où l'utilisation de la mémoire est contrôlée. – ogrisel