马哈拉诺比斯距离反演协方差矩阵
我正在编写一个函数来获取两个向量之间的Mahalanobis距离。 我知道这是使用等式a’* C ^ -1 * b实现的,其中a和b是向量,C是协方差矩阵。 我的问题是,有没有一种有效的方法可以在不使用Gauss-Jordan消除的情况下找到矩阵的逆矩阵,还是没有办法解决这个问题? 我正在寻找一种方法来做到这一点,而不是任何预定义的function。
我知道C是一个Hermitian,正定矩阵,那么有什么方法可以算法利用这个事实呢? 或者是否有一些聪明的方法来计算Mahalanobis距离而不计算协方差的倒数? 任何帮助,将不胜感激。
***编辑:上面的马哈拉诺比斯距离方程是不正确的。 它应该是x’* C ^ -1 * x,其中x =(ba),而b和a是我们试图找到的距离的两个向量(感谢LRPurser)。 因此,在所选答案中提出的解决方案如下:
d = x’* b,其中b = C ^ -1 * x C * b = x,因此使用LU分解或LDL’因子分解来求解b。
您可以(并且应该!)使用LU分解而不是显式反转矩阵:使用分解求解C x = b
具有比计算C^-1
和乘以向量b
更好的数值属性。
由于矩阵是对称的,因此LU分解实际上等同于LDL *分解 ,这是您在实际情况中应该实际使用的分解 。 由于矩阵也是正定的,因此您应该能够在不进行旋转的情况下执行此分解。
编辑:请注意,对于此应用程序,您不需要解决完整的C x = b
问题。
相反,给定C = LDL*
和差矢量v = ab
,求解L* y = v
(这是完整LU求解器的一半)。
然后,可以在线性时间中计算y^t D^-1 y = v^t C^-1 v
。
第一马哈拉诺比斯距离(MD)是两个向量的测量中的不确定性的标准距离。 当C=Indentity matrix
,MD减小到欧几里德距离,因此乘积减少到向量范数。 对于所有非零向量,MD总是正定的或大于零。 通过适当选择向量a
和b
的公式, a*C^-1*b
可以小于零。 希望您正在寻找的向量的差异是x=(ab)
,这使得计算x^t*C^-1*x
其中x^t
是向量x
的转置。 还要注意MD=sqrt(x^t*C^-1*x)
因为你的矩阵是对称的和正定的,所以你可以利用Cholesky分解(MatLab-chol)
,它使用一半的操作作为LU并且在数值上更多稳定。 chol(C)=L
其中C=L*L^t
其中L
是下三角矩阵, L^t
是L
的转置,使其为上三角形。 你的算法应该是这样的
(Matlab的)
x=ab; L=chol(C); z=L\x; MD=z'*z; MD=sqrt(MD);