具有稀疏矩阵的sklearn tsne

时间:2017-03-01 20:50:23

标签: python scikit-learn sparse-matrix dimensionality-reduction

我正在尝试使用预先计算的距离值在非常稀疏的矩阵上显示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:传递了稀疏矩阵,但需要密集数据   方法= “barnes_hut”。使用X.toarray()转换为密集的numpy数组   如果数组足够小,以适应内存。除此以外   考虑降维技术(例如TruncatedSVD)

我不想执行TruncatedSVD,因为我已经计算了距离。

如果我更改method='exact',我会收到另一个错误(这有点可疑):

  

NotImplementedError:> =和< =不能与0一起使用。

注意:我的距离矩阵大约是100k x 100k,大约有1M非零值。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为这可以解决您的问题:

X = csr_matrix((distances, (row, col)), shape=(3, 3)).todense()

如果您确实使用csr_matrix而不是csc_matrix