5
我有一個大的(100K由30K)和(非常)在svmlight格式稀疏數據集,其餘加載如下:稀疏實現/ scikit學習
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")
它返回一個稀疏SciPy的陣列X
我只需要計算所有培訓點的成對距離爲
D = pdist(X)
不幸的是,距離計算的實現只scipy.spatial.distance工作對於密集矩陣。由於該數據集的大小是不可行的,比方說,使用pdist作爲
D = pdist(X.todense())
任何指針稀疏矩陣距離計算的實現方式或解決方法與關於這個問題,將不勝感激。
非常感謝
謝謝你的回答。起初,它似乎解決了我的問題,因爲「euclidean_distances」適用於稀疏數據,但即使使用'D = euclidean_distances(X,X)',我也會遇到內存不足錯誤。 – Nicholas
@Nicholas:'euclidean_distances'必然返回一個'X.shape [0]'×'X.shape [0]'密集數組,在你的情況下是1e10。 –
@Nicholas如果你想在大數據集上實現k-means(在'X.shape [0]'方向),你應該試試'sklearn.cluster.MiniBatchKMeans'類。它通過小塊逐步處理輸入集,從而控制內存使用量。 – ogrisel