降维技术(TSNE/PCA)在稀疏矩阵上的应用

我想使用降维(DR)技术来可视化我的数据,并了解它们之间的相关性。我计划使用Barnes-hut tsne,但我不知道如何向TSNE提供输入,因为根据用户指南,示例应用程序中的数据是以常规矩阵形式存在的。我有大约1200万条记录,包含5000个不同的值,无法将它们存储在主内存中。我希望通过降维(DR)技术,将这些不同的值可视化为二维散点图。我的数据是以邻接列表形式存在的(因为它非常稀疏)。

假设我有以下记录:

2 3 104 677 9 1025 6

这些应该是我的前6条记录。在这种情况下,我只有10个不同的值。上述矩阵(表格)表明,第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

这一行代码用行压缩稀疏矩阵格式填充row_Pcol_Pval_P,以NxN的相似性矩阵形式。也就是说,row_PN+1个元素,这些元素包含指向col_Pval_P的索引,后两者都有nnz个元素(N是稀疏矩阵的行数,nnz是非零元素的数量)。val_P中的元素假定为非负值(例如,高斯核值)。

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

Barnes-Hut t-SNE代码的其余部分对输入相似性是如何计算的并不关心,因此你不需要进行其他任何更改。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注