Mam duże (100K przez 30K) i (bardzo) rzadki zbiór danych w formacie svmlight które załadować w następujący sposób:Rzadkie implementacje obliczenia odległości w Pythonie/scikit-learn
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")
która zwraca rzadki scipy tablica X
I wystarczy obliczyć parami odległości wszystkich punktów szkoleniowych
D = pdist(X)
niestety implementacje wyznaczania odległości w pracy jedynie scipy.spatial.distance dla gęstych matryc. Ze względu na wielkość zbioru danych jest niemożliwe do, powiedzmy, użyj pdist jak
D = pdist(X.todense())
Wszelkie odnośniki do nielicznych wdrożeń wyznaczania odległości matrycy lub obejścia w odniesieniu do tego problemu będzie mile widziana.
Dziękujemy
Dziękuję za odpowiedź. Na początku wydawało mi się to rozwiązaniem mojego problemu, ponieważ "euclidean_distances" działa z rzadkimi danymi, jednak nawet przy 'D = euclidean_distances (X, X)' dostaję błąd braku pamięci. – Nicholas
@Nicholas: 'euclidean_distances' koniecznie zwraca' X.shape [0] '×' X.shape [0] 'gęstą tablicę, która wynosi 1e10 w twoim przypadku. –
@Nicholas, jeśli chcesz zastosować k-średnie na dużym zestawie danych (w kierunku 'X.shape [0]'), powinieneś wypróbować klasę 'sklearn.cluster.MiniBatchKMeans'). Przetwarza on zestaw wejściowy stopniowo małymi porcjami, dzięki czemu kontrolowane jest użycie pamięci. – ogrisel