我正在尝试在Scikit-learn的DictVectorizer返回的Scipy稀疏矩阵上计算最近邻聚类。但是,当我尝试使用Scikit-learn计算距离矩阵时,无论是通过pairwise.euclidean_distances还是pairwise.pairwise_distances使用“欧几里得”距离,都会收到错误消息。我原本以为Scikit-learn可以计算这些距离矩阵。
我的矩阵高度稀疏,形状为:<364402x223209稀疏矩阵,类型为,在压缩稀疏行格式中有728804个存储元素>。
我还尝试了Scipy中的pdist和kdtree等方法,但收到了其他无法处理结果的错误。
请问有人可以指点我一个有效的解决方案,使我能够计算距离矩阵和/或最近邻结果吗?
一些示例代码:
我得到以下结果:
我的矩阵高度稀疏,形状为:<364402x223209稀疏矩阵,类型为,在压缩稀疏行格式中有728804个存储元素>。
我还尝试了Scipy中的pdist和kdtree等方法,但收到了其他无法处理结果的错误。
请问有人可以指点我一个有效的解决方案,使我能够计算距离矩阵和/或最近邻结果吗?
一些示例代码:
import numpy as np
from sklearn.feature_extraction import DictVectorizer
from sklearn.neighbors import NearestNeighbors
from sklearn.metrics import pairwise
import scipy.spatial
file = 'FileLocation'
data = []
FILE = open(file,'r')
for line in FILE:
templine = line.strip().split(',')
data.append({'user':str(int(templine[0])),str(int(templine[1])):int(templine[2])})
FILE.close()
vec = DictVectorizer()
X = vec.fit_transform(data)
result = scipy.spatial.KDTree(X)
错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/scipy/spatial/kdtree.py", line 227, in __init__
self.n, self.m = np.shape(self.data)
ValueError: need more than 0 values to unpack
同样地,如果我运行:
scipy.spatial.distance.pdist(X,'euclidean')
我得到以下结果:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/scipy/spatial/distance.py", line 1169, in pdist
[X] = _copy_arrays_if_base_present([_convert_to_double(X)])
File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/scipy/spatial/distance.py", line 113, in _convert_to_double
X = X.astype(np.double)
ValueError: setting an array element with a sequence.
最后,使用scikit-learn中的NearestNeighbor
会导致内存错误:
nbrs = NearestNeighbors(n_neighbors=10, algorithm='brute')
364402x364402
的数组? - Juh_