包含向量和协方差矩阵的负积

Negative product containing vector and covariance matrix

我正在实施 Mahalanobis distance 来测量同一个池的两个向量之间的距离,并且只是认识到它似乎最正确但有时不正确,可能是由于负值.. 我意识到有时

出现负值。这就是为什么距离分别变为负数代码会抛出错误,因为负值的根.. 我想知道这个问题。数据为(一行代表一个对象):

A: 376.498943729227 2.75082585760394    376.688899264061    2.75084113940164
B: 373.287817831307 2.75074375125675    373.392663499518    2.75092754974534
C: 377.091938091279 2.75082292557743    377.466035993347    2.75077191984784
D: 374.799551607287 2.75094834987157    374.209110037364    2.75091796001419

则协方差矩阵S为

7.13457e-09  3.13933e-05  5.45925e-10  3.80508e-06
 3.13933e-05      2.96355 -0.000115865      3.28797
 5.45925e-10 -0.000115865  5.31665e-09 -0.000137211
 3.80508e-06      3.28797 -0.000137211      3.79042

它的倒数是

 3.24779e+22 -8.58499e+18  1.40166e+22  7.92177e+18
-8.58499e+18   2.2693e+15 -3.70505e+18 -2.09399e+15
 1.40166e+22 -3.70505e+18  6.04917e+21  3.41882e+18
 7.92177e+18 -2.09399e+15  3.41882e+18  1.93222e+15

现在我想知道为什么我从突出显示的产品中得到负面结果(对于 B 和 D)? 我不确定这是一个编程问题(这就是为什么我还没有包含代码行)还是理论上的问题,但我非常感谢您的帮助!

我使用 Eigen class。

编辑: 我通过 R 计算协方差矩阵 S 的特征值并得到:

7.593311e+02 1.243531e-01 1.156646e-02 -3.920936e-04

为什么我有不同的? 我用了

M<- matrix(c(376.498943729227, 2.75082585760394, 376.688899264061, 2.75084113940164, 
       373.287817831307,    2.75074375125675,   373.392663499518,   2.75092754974534,
       377.091938091279,    2.75082292557743,   377.466035993347,   2.75077191984784,
       374.799551607287,    2.75094834987157,   374.209110037364,   2.75091796001419
       ), 4, 4)
> M
           [,1]       [,2]       [,3]       [,4]
[1,] 376.498944 373.287818 377.091938 374.799552
[2,]   2.750826   2.750744   2.750823   2.750948
[3,] 376.688899 373.392663 377.466036 374.209110
[4,]   2.750841   2.750928   2.750772   2.750918
ev<- eigen(M)
values<- ev$values
values
[1]  7.593311e+02  1.243531e-01  1.156646e-02 -3.920936e-04

我将你的矩阵复制并粘贴到 Matlab 并计算了特征值,其中最小的是 -4.0819e-13

这看起来还不错,但它表明存在问题。协方差矩阵应该是半正定的,因此没有特征值应该小于 0。可能由于代码中的舍入问题,矩阵具有(略)负的特征值,这可能会导致您遇到的问题。

此外,由于两个特征值几乎为零,计算逆确实是一个非常勇敢的举动。意思是:你不应该,因为你本质上是在计算奇异矩阵的逆。

您的协方差矩阵有两个几乎为零的特征值(10^-10 和 10^-18)。因此,矩阵不容易倒置,甚至可以认为是non-invertible.

两个小特征值的原因是你的数据点没有填满整个4Dspace而只是一个2D子space(嵌入4D的平面)

要计算合理的距离,您需要将您的点投影到 2D space(或您的真实数据具有的任何维度)上。您可以使用 PCA 执行此操作。在此之后,您可以计算二维距离。