我想执行降维(DR)技术来可视化我的数据以及它们之间的相互关系。我打算使用Barnes-hut tsne,但我无法了解如何向TSNE提供输入,因为示例应用程序根据user guide以常规矩阵形式提供数据。我有大约1200万条记录,有5000个不同的值,我无法将它们存储到主内存中。我想执行降维(DR),以便在二维散点图上可视化这些不同的值。我有邻接列表形式的数据(因为它太稀疏)。
比方说,我有以下记录:
2 3 10
4 6
7
7 9 10
2
5 6
这些应该是我的前6条记录。在这种情况下,我只有10个不同的值。上面的矩阵(表)表明第一条记录有2,3和10列为1,而其他列为0(邻接列表)。
这些不同的值映射到文档(记录)中的单词(标签)。
如何使用此类数据执行fast-TSNE。或者我如何将其转换为TSNE所需的兼容格式?我更喜欢哪种语言?
我更喜欢使用Python或Matlab,但其他任何东西都没问题。让我知道你的建议。
P.S。我有很高的计算机来完成任务。
答案 0 :(得分:1)
Barnes-Hut t-SNE代码不支持开箱即用,但它应该是代码中相对简单的变化,以使其支持此功能。请特别注意以下代码行:https://github.com/lvdmaaten/bhtsne/blob/master/tsne.cpp#L123
此行将row_P
,col_P
和val_P
填充为行压缩稀疏矩阵格式的NxN
相似度矩阵。也就是说,row_P
包含N+1
元素,其中包含col_P
和val_P
的索引,两者都有nnz
个元素(N
是行和nnz
稀疏矩阵的非零项数)。假设val_P
中的元素是非负的(例如,高斯核值)。
我认为你能做的最简单的事情是通过调用一个新函数替换这个函数调用,该函数根据你自己的输入数据计算相似度矩阵(以你最方便的稀疏格式运行)。您甚至可以在Matlab中实现相似度矩阵计算,然后写入获得结果稀疏矩阵的Mex代码位,并将其复制到row_P
,col_P
和val_P
。这应该很容易,因为Matlab也使用行压缩稀疏矩阵格式;看看mxGetIr
和mxGetJc
Mex函数。
Barnes-Hut t-SNE代码的其余部分与输入相似度的计算方式无关,因此您不必进行任何其他更改。