【问题标题】:Largest Eigenvector and possible Scipy weirdness最大特征向量和可能的 Scipy 怪异
【发布时间】:2013-01-31 13:56:36
【问题描述】:

不确定这是包中的错误还是由于其他原因,但我们开始吧。

我正在使用以下程序包在相似度分数的对称矩阵(大小为 10x10)上找到最大特征值及其对应的特征向量:

scipy.sparse.linalg.eigen.arpack.eigsh

,像这样:

scipy.sparse.linalg.eigen.arpack.eigsh(mymatrix, 1, which='LM')

现在我的问题是,当我多次运行它时(使用相同的矩阵、设置等),有时特征向量中的值是正的,有时是负的(参见 Run 3) .

有谁知道这可能是为什么,还是一个错误?它似乎没有模式,但它只发生在我运行代码而不在每次迭代后关闭 Python 时(即每次运行后按 F5)。

### Run 1: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

### Run 2: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

### Run 3:###
[[ 0.31056873]
[ 0.31913092]
[ 0.3149287 ]
[ 0.32262921]
[ 0.32190688]
[ 0.31292658]
[ 0.32424732]
[ 0.31885208]
[ 0.31808024]
[ 0.298174  ]]

### Run 4: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

这不是一个大问题,但我不喜欢我的代码中的不确定性 ;-)

非常感谢,

马丁

【问题讨论】:

    标签: python scipy eigenvector eigenvalue


    【解决方案1】:

    这实际上是一道数学题。

    但原因是计算特征向量时存在任意相位。您正在为 x 求解 Ax = bx。该方程在乘以一个(可能是复杂的)相位时是不变的。

    至于为什么它以(看似)随机的方式发生,我不知道。但我很确定这不是错误。

    【讨论】:

    • ARPACK 使用(隐式重启)Anoldi method 来查找特征值。请注意,该算法的第一步是“从具有范数 1 的任意向量 q1 开始”;据推测,根据起点(可以随机选择),它会收敛到不同的解决方案。
    • 很好,谢谢...+1 :) 致 OP:如果你想解决你的问题,你必须实现你自己的约定。例如,如果第一个条目为负数,则将向量中的所有条目乘以 -1。无论如何,不​​确定你在做什么,但听起来你可能正在考虑 PCA,在这种情况下你不应该担心,因为你只对特征向量分量的绝对平方感兴趣,就我而言记住。
    • 感谢大家的精彩解释和后续的 cmets,唷!我以为发生了不好的事情;-)
    【解决方案2】:

    您在函数的which 参数中使用带有'LM' 的函数。使用此设置,您正在搜索最高 幅度 的特征值,我注意到矩阵的最小和最大特征值的绝对值非常接近。
    将此添加到算法正在估计特征值的事实中,您就会得到问题的答案。
    尝试使用which = 'LR' 运行您的代码,这应该会为您提供具有最高实际值的特征值(无论如何,您的特征值都是真实的)。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多