2012-01-21 1 views
5

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

Répondre

4

En scikit-learn il y a une fonction sklearn.metrics.euclidean_distances qui fonctionne aussi bien pour les matrices creuses et les tableaux de numpy denses. Voir le reference documentation. Cependant, les distances non-euclidiennes ne sont pas encore implémentées pour les matrices creuses.

+0

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

+0

@Nicholas: 'euclidean_distances' renvoie nécessairement un tableau dense' X.shape [0] '×' X.shape [0] ', ce qui correspond à 1e10 dans votre cas. –

+1

@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

Questions connexes