Python:使用HDF5格式的不完全成对不相似矩阵运行多维缩放

时间:2014-08-01 13:37:04

标签: python scikit-learn hdf5 blast multi-dimensional-scaling

我正在研究NCBI BLAST中产生的蛋白质 - 蛋白质相似性的大数据集。我已将结果存储在一个大的成对矩阵(25,000 x 25,000)中,我使用多维缩放(MDS)来显示数据。这些矩阵太大而无法在RAM中使用,因此我将它们以HDF5格式存储在磁盘上,并使用h5py模块访问它们。

sklearn流形MDS方法为3D中的小规模数据生成了极好的可视化,因此这是我目前正在使用的数据。对于计算,它需要完整的对称成对不相似矩阵。但是,对于大型数据集,会形成一种“外壳”,使已形成的簇模糊不清。

http://imgur.com/XkpoOJ4

我认为问题在于我需要输入完整的相异矩阵。有些蛋白质彼此不相关,但在成对相异性矩阵中,我被迫输入相异性的默认最大值。在sklearn MDS的文档中,它表示值0被认为是缺失值,但输入0我想要缺少值似乎不起作用。

是否有任何方法可以输入不完全相异矩阵,因此无需输入不相关的蛋白质?或者是否有更好/更快的方式来显示成对差异矩阵中的数据?

2 个答案:

答案 0 :(得分:1)

MDS需要完全相异矩阵AFAIK。但是,我认为它可能不是您计划实现的最佳工具。假设你的相异矩阵是 metric (不一定是这种情况),它肯定可以嵌入25,000个维度,但是"破碎"那将3D"压缩"数据指向太多。这导致了#34; crust"你想剥离。

我宁愿在差异矩阵上运行分层聚类算法,然后对叶子(即蛋白质)进行排序,以便将类似的叶子保持在一起,然后根据生成的排序将行和列置换为可视化不相似矩阵通过聚类。假设短距离是黄色的,长距离是蓝色的(想想色盲!:-)),这应该会产生一个矩阵,沿对角线有一个大的黄色矩形,类似的蛋白质聚集在一起。

您必须对图像进行缩减采样或购买25,000 x 25,000的屏幕:-)但我认为您希望有一个"整体"无论如何,低分辨率视图。

答案 1 :(得分:0)

在非线性维度减少的名称下有许多算法。您可以在维基百科上找到这些算法的长列表,其中大部分是近年来开发的。如果PCA不能很好地处理您的数据,我会尝试使用CCA或tSNE方法。后者尤其适用于显示集群结构。