【问题标题】:Fast methods for approximating the highest 3 eigenvalues and eigenvectors of a large symmetric matrix逼近大型对称矩阵的最高 3 个特征值和特征向量的快速方法
【发布时间】:2017-04-10 01:22:45
【问题描述】:

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

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

一些参数:

  1. B 矩阵是symmetricreal,相当dense
  2. 理论上B 的特征值分解应该总是产生实数。
  3. 我不需要完全精确的估计,只需要快速估计。我需要它在几个小时内完成。
  4. 我用 python 和 C++ 编写

我的问题:有没有快速的方法来估计如此大的B 矩阵的三个最高特征向量和特征值?

我的进步:我找到了一个method of approximating the highest eigenvalue of a matrix,但不知道能不能概括到前三名。我也找到了this paper written in 1996,但它非常技术性很强,我很难阅读。

【问题讨论】:

  • 在给定 64 位浮点条目的情况下,该矩阵需要超过 1 TB 的存储空间。忘记特征向量——即使是做一个矩阵向量乘法看起来很痛苦。
  • 但是不需要存储原始矩阵!它是在 MDS 算法中间接给出的,您可以使用它来执行矩阵向量乘法,而无需先计算矩阵。
  • 您是否查看过用于大数据的近似 MDS?例如。见pike.cs.ucla.edu/~weiwang/paper/CIMCV06.pdf

标签: python c++ algorithm matrix eigenvalue


【解决方案1】:

G. Golub 和 C.F Van Loan Matrix Computations 2nd 在第 9 章中指出,Lanczos 算法是一种选择(除了理想情况下矩阵应该是稀疏的 - 它显然也适用于非稀疏矩阵)

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

【讨论】:

    【解决方案2】:

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

    关于速度:您可以随机抽取那个庞大的数据集,使其仅是N 个项目的数据集。如果你只得到三个维度,我希望你也可以去掉大部分数据来大致了解特征向量。你可以称之为:“选举投票”。我无法帮助您测量错误率,但我会尝试对 1k 个项目进行多次抽样,看看结果是否大致相同。

    现在您可以获取多个“民意调查”的平均值来构建“预测”。

    【讨论】:

      【解决方案3】:

      看看这个帖子中的建议

      Largest eigenvalues (and corresponding eigenvectors) in C++

      按照那里的建议,您可以使用具有 C++ 接口的 ARPACK 包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 2016-11-29
        • 1970-01-01
        • 2012-08-08
        • 2018-10-31
        • 2019-06-09
        相关资源
        最近更新 更多