【问题标题】:Finding inverse of a matrix with high condition number查找具有高条件数的矩阵的逆
【发布时间】:2016-08-16 03:49:52
【问题描述】:

我正在尝试找到 this 9x9 covariance matrix 的倒数,以便可以将其与 mahalanobis distance 一起使用。但是,我从matrix inverse 得到的结果是一个充满1.02939420e+16 的矩阵。我一直试图找出原因,考虑到 Wolfram 会给我正确的答案,这似乎与矩阵的条件数有关,在这种情况下是 3.98290435292e+16

虽然我想了解这背后的数学原理,但此刻我真正需要的只是解决这个问题,这样我就可以继续实施了。有没有办法找到这种矩阵的逆矩阵?或者是否有可能直接从数据中找到逆协方差矩阵?

编辑:矩阵数据(与 pastebin 链接相同)

[[ 0.46811097  0.15024959  0.01806486 -0.03029948 -0.12472314 -0.11952018 -0.14738093 -0.14655549 -0.06794621]
 [ 0.15024959  0.19338707  0.09046136  0.01293189 -0.05290348 -0.07200769 -0.09317139 -0.10125269 -0.12769464]
 [ 0.01806486  0.09046136  0.12575072  0.06507481 -0.00951239 -0.02944675 -0.05349869 -0.07496244 -0.13193147]
 [-0.03029948  0.01293189  0.06507481  0.12214787  0.04527352 -0.01478612 -0.02879678 -0.06006481 -0.1114809 ]
 [-0.12472314 -0.05290348 -0.00951239  0.04527352  0.164018    0.05474073 -0.01028871 -0.02695087 -0.03965366]
 [-0.11952018 -0.07200769 -0.02944675 -0.01478612  0.05474073  0.13397166  0.06839442  0.00403321 -0.02537928]
 [-0.14738093 -0.09317139 -0.05349869 -0.02879678 -0.01028871  0.06839442  0.14424203  0.0906558   0.02984426]
 [-0.14655549 -0.10125269 -0.07496244 -0.06006481 -0.02695087  0.00403321  0.0906558   0.17054466  0.14455264]
 [-0.06794621 -0.12769464 -0.13193147 -0.1114809  -0.03965366 -0.02537928  0.02984426  0.14455264  0.32968928]]

【问题讨论】:

  • 由于防火墙,您提供的链接不一定对所有人都有效。您可以在主题中发布您的矩阵吗?
  • @ColonelBeauvel 编辑了问题以包含数据。
  • 因此,我在下面提供了我的答案,解释了大值,但更进一步,通过尝试反转不可逆矩阵来看看你想要实现的目标会很有趣......
  • 我在运行 linalg.inv 时得到一个具有合理值的矩阵:pastebin.com/CHqxJqPV

标签: python numpy matrix covariance matrix-inverse


【解决方案1】:

您提供的矩阵m 的行列式为0,因此从数值的角度来看是不可逆的(这解释了您拥有的巨大值往往会碰到Inf):

In [218]: np.linalg.det(m)
Out[218]: 2.8479946613617788e-16

如果您开始进行线性代数运算/解决问题,我强烈建议您检查一些基本概念,以避免出现数值错误/错误: https://en.wikipedia.org/wiki/Invertible_matrix

【讨论】:

  • 我实际上了解这些基础知识,问题是我正在遵循 Active Shape Model 上的算法,该算法假设该矩阵是可逆的。因此,我没想到它会达不到这个基本条件。数据基本上是一个地标点周围的多个图像的采样梯度,我正在尝试为该点建立一个统计模型。然后使用模型 - 均值向量和协方差矩阵通过使用马氏距离找到与其他采样向量的最佳匹配。但是,它无法找到逆。
  • 嗯,是的,由于矩阵,使用的模型失败了。在这种情况下,您应该采取另一种方法。但是,当您必须反转矩阵时,最好自动检查具有阈值的行列式。这样,如果发生错误,您可以更轻松地进行调查!
【解决方案2】:

您面临一个非常重要且基本的数学问题。如果您的方法给出不可逆矩阵,则该方法有问题。该方法试图解决ill-posed problem。可能所有适定问题都在十九世纪得到解决。解决不适定问题的最常见方法是regularization。有时Moore-Penrose pseudoinverse 可能很方便。 Scipy.linalg 有伪逆。但伪逆不是捷径。使用伪逆,您将无法解决的问题 A 替换为可解决的问题 B。有时问题 B 的解决方案可以成功地代替问题 A 的不存在解决方案,但这是一个数学研究问题。

【讨论】:

    【解决方案3】:

    零行列式意味着您的矩阵具有线性相关的行(或列)。换句话说,模型中的某些信息是多余的(它包含过多或重复的信息)。重新开发您的模型以排除冗余。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2021-01-25
      • 2014-03-29
      • 2016-11-02
      • 2012-04-21
      相关资源
      最近更新 更多