两个多元正态分布之间的距离度量(具有不同的均值和协方差)

机器算法验证 正态分布 协方差矩阵 距离
2022-04-12 08:49:27

我对空间中的两个点有两个估计 - 每个都有一个 3D 位置和一个雪茄形 3x3 协方差矩阵,我正在检查这些观察实际上是指同一个点的假设。所以我想用这个假设来计算两个观察结果的一致性。

搜索将 Bhattacharyya 距离或 Kullback-Leibler 散度作为候选。我不是在寻找最正确的估计,而是一个易于实现的函数,它采用两个位置和两个 3x3 矩阵并返回标准偏差的百分比或距离。

以下是一些类似的主题:

具有不同协方差的两个二元分布之间的马氏距离

两个协方差矩阵之间的相似性或距离的度量

1个回答

最后我去了巴塔查亚距离。我改编了这里引用的 R 代码:

// In the following, Vec3 and Mat3 are C++ Eigen types.

/// See: https://en.wikipedia.org/wiki/Mahalanobis_distance
double mahalanobis(const Vec3& dist, const Mat3& cov)
{
    return (dist.transpose()*cov.inverse()*dist).eval()(0);
}

/// See: https://en.wikipedia.org/wiki/Bhattacharyya_distance
double bhattacharyya(const Vec3& dist, const Mat3& cov1, const Mat3& cov2)
{
    const Mat3 cov = (cov1+cov2)/2;
    const double d1 = mahalanobis(dist, cov)/8;
    const double d2 = log(cov.determinant()/sqrt(cov1.determinant()*cov2.determinant()))/2;
    return d1+d2;
}