Python:在HDF5格式下运行具有不完整成对差异矩阵的多维缩放
我正在处理一些大型的数据集,这些数据集是通过NCBI BLAST生成的蛋白质相似性数据。我把结果存储在一个很大的成对矩阵中(25,000 x 25,000),并使用多维缩放(MDS)来可视化这些数据。由于这些矩阵太大,无法在内存中处理,所以我把它们存储在硬盘上,使用HDF5格式,并通过h5py模块来访问。
我使用的sklearn的MDS方法在处理小规模数据时能生成很好的3D可视化效果,所以我现在正在用这个方法。这个方法需要一个完整的对称成对不相似度矩阵。然而,在处理大型数据集时,会形成一种“外壳”,遮挡了已经形成的聚类。
我认为问题在于,我需要输入一个完整的不相似度矩阵。有些蛋白质之间没有关系,但在成对不相似度矩阵中,我被迫输入一个默认的最大不相似度值。在sklearn MDS的文档中提到,值为0被视为缺失值,但在我想要缺失值的地方输入0似乎并没有效果。
有没有办法输入一个不完整的不相似度矩阵,这样不相关的蛋白质就不需要被输入?或者有没有更好、更快的方法来可视化成对不相似度矩阵中的数据?
2 个回答
有很多算法被称为非线性降维。你可以在维基百科上找到一长串这样的算法,大部分都是最近几年开发的。如果主成分分析(PCA)对你的数据效果不好,我建议你试试CCA或者tSNE这两种方法。特别是tSNE,它在展示数据的聚类结构方面表现得特别好。
MDS(多维尺度法)需要一个完整的不相似度矩阵,按照我所知。不过,我觉得这可能不是你想要实现的最佳工具。假设你的不相似度矩阵是度量型(这并不一定),它确实可以嵌入到25000个维度中,但把它“压缩”到3D会让数据点聚在一起太紧了。这就导致了你想要剥离的“外壳”。
我更倾向于在不相似度矩阵上运行一个层次聚类算法,然后对聚类的结果进行排序(也就是把相似的蛋白质放在一起),接着根据这个排序来可视化不相似度矩阵,调整行和列的顺序。假设短距离用黄色表示,长距离用蓝色(考虑到色盲的朋友们!:-)),这样就能得到一个矩阵,沿对角线有大大的黄色矩形,表示相似的蛋白质聚在一起。
你可能需要降低图像的分辨率,或者买一个25000 x 25000的显示屏 :-) 不过我想你其实是想要一个“整体”的低分辨率视图。