用于近似大对称矩阵的最高3个特征值和特征向量的快速方法

时间:2016-11-25 15:41:52

标签: python c++ algorithm matrix eigenvalue

我正在编写代码以计算Classical Multidimensional Scaling(缩写为MDS)的n一个非常大的n矩阵,在我的示例中为n = 500,000

在MDS的一个步骤中,我需要通过n矩阵计算n的最高三eigenvalues and their corresponding eigenvectors。该矩阵称为B矩阵。我只需要这三个特征向量和特征值。计算大矩阵的特征向量和特征值的常用方法需要很长时间,而且我不需要非常准确的答案,所以我正在寻找特征向量和特征值的估计。

一些参数:

  1. B矩阵为symmetricreal,且非常dense
  2. 理论上B的特征值分解应始终产生实数。
  3. 我不需要完全精确的估计,只需要快速估算。我需要它在几个小时内完成。
  4. 我用python和C ++编写
  5. 我的问题:是否有快速估算如此大B矩阵的三个最高特征向量和特征值的方法?

    我的进步:我找到了method of approximating the highest eigenvalue of a matrix,但我不知道是否可以将它推广到最高的三个。我也找到this paper written in 1996,但这对我来说非常技术性和难以阅读。

3 个答案:

答案 0 :(得分:8)

-G。 Golub和C.F Van Loan矩阵计算第9章第2条说明Lanczos算法是一个选择(除了矩阵理想地应该是稀疏的 - 它显然也适用于非稀疏矩阵)

https://en.wikipedia.org/wiki/Lanczos_algorithm

答案 1 :(得分:2)

您可以获得B的最高特征向量,然后使用该特征向量将数据转换为B'。然后弹出B'的第一列并获取B'',这样您就可以获得B''的最高特征向量:它足以构成B合理的第二高特征向量。然后是第三个。

关于速度:您可以随机将该巨大数据集采样为N个项目的数据集。如果您只获得三个维度,我希望您也可以摆脱大部分数据以获得特征向量的概述。你可以称之为:'选举民意调查'。我无法帮助您测量错误率,但我会尝试多次采样1k项,并查看结果是否大致相同。

现在你可以得到几个'民意测验'的平均值来建立'预测'。

答案 2 :(得分:0)

看一下这个帖子中的建议

Largest eigenvalues (and corresponding eigenvectors) in C++

根据建议,您可以使用具有C ++接口的ARPACK包。