稀疏矩阵上的降维 (TSNE/PCA)

Dimension Reduction (TSNE/PCA) on Sparse Matrix

我想执行降维 (DR) 技术来可视化我的数据以及它们之间的相关性。我打算使用 Barnes-hut tsne but I am not able to get how to provide input to TSNE because the sample application has data in regular matrix form according to user guide。我有大约 1200 万条记录,其中有 5000 个不同的值,但我无法将它们存储到主内存中。我想执行降维 (DR),以便在二维散点图上可视化这些不同的值。我有邻接表形式的数据(因为它太稀疏了)。

比方说,我有以下记录:

2 3 10
4 6
7
7 9 10
2
5 6

这些应该是我的前 6 条记录。在这种情况下,我只有 10 个不同的值。上面的矩阵 (table) 表明第 1 条记录有 2,3 和 10 列为 1,而其他列为 0(邻接列表)。

这些不同的值被映射到文档(记录)中出现的单词(标签)。

如何使用此类数据执行快速 TSNE。或者我如何将其转换为 TSNE 所需的兼容格式?我应该更喜欢哪种语言?

我更喜欢使用 Python 或 Matlab,但其他任何东西都可以。让我知道你的建议。

P.S。我有非常高的计算机来完成任务。

Barnes-Hut t-SNE 代码不支持这种开箱即用的功能,但它应该是代码中相对直接的更改以使其支持这种功能。特别是,请参阅以下代码行:https://github.com/lvdmaaten/bhtsne/blob/master/tsne.cpp#L123

此行用行压缩稀疏矩阵格式的 NxN 相似度矩阵填充 row_Pcol_Pval_P。也就是说,row_PN+1 个元素,这些元素包含 col_Pval_P 的索引,它们都有 nnz 个元素(N 是行和 nnz 稀疏矩阵的非零条目数)。 val_P 中的元素假定为非负值(例如,高斯核值)。

我认为您可以做的最简单的事情是通过调用一个新函数来替换此函数调用,该函数根据您自己的输入数据计算相似度矩阵(以您最方便的任何稀疏格式进行操作)。您甚至可以在 Matlab 中实现相似矩阵计算,然后编写一些 Mex 代码来获取生成的稀疏矩阵并将其复制到 row_Pcol_Pval_P 中。这应该很容易,因为 Matlab 也使用行压缩稀疏矩阵格式;看看 mxGetIrmxGetJc Mex 函数。

Barnes-Hut t-SNE 代码的其余部分与输入相似度的计算方式无关,因此您不必进行任何其他更改。