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