包含向量和协方差矩阵的负积
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 执行此操作。在此之后,您可以计算二维距离。
我正在实施 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 执行此操作。在此之后,您可以计算二维距离。