我试图用预先计算的距离值在一个非常稀疏的矩阵上显示tsne,但我遇到了麻烦。
归根结底是这样的:
row = np.array([0, 2, 2, 0, 1, 2])
col = np.array([0, 0, 1, 2, 2, 2])
distances = np.array([.1, .2, .3, .4, .5, .6])
X = csc_matrix((distances, (row, col)), shape=(3, 3))
Y = TSNE(metric='precomputed').fit_transform(X)但是,我得到了以下错误:
TypeError:传递稀疏矩阵,但method="barnes_hut“需要密集数据。如果数组足够小,足以容纳内存,则使用X.toarray()将其转换为密集的numpy数组。否则,考虑降维技术(如TruncatedSVD)。
我不想执行TruncatedSVD,因为我已经计算了距离。
如果我更改了method='exact',就会得到另一个错误(这有点可疑):
NotImplementedError:>=和<=不适用于0。
注意:我的距离矩阵大约是100 kx100k,大约有1M的非零值。
有什么想法吗?
发布于 2017-03-01 20:58:13
我认为这能解决你的问题:
X = csr_matrix((distances, (row, col)), shape=(3, 3)).todense()如果你真的是csr_matrix而不是csc_matrix
https://stackoverflow.com/questions/42541788
复制相似问题