计算距离高斯瓦瑟斯坦

24日视图(30天)
马特奥Tesori
马特奥Tesori 2021年3月23日
评论道: Ogul可以Yurdakul2023年5月16日15:24
问题
我必须计算瓦瑟斯坦与意味着两个二维高斯分布之间的距离 , 和协方差 ,
根据方程9 这篇论文 承认,在高斯情况下,瓦瑟斯坦距离下面的解析表达式
我的问题是实现这个方程。
试着解决方案
我不清楚什么是作为一个矩阵的平方根,也许这是我的问题的核心。我想,在方程 一个矩阵的平方根是它的柯列斯基因素。
根据这一解释,我写了下面的代码来执行瓦瑟斯坦距离两个高斯分布的参数
函数Sigma1 (dd) = wass_dist (m1, m2, Sigma2)
sqrtSigma1 =胆固醇(Sigma1);
sqrt_temp =胆固醇(sqrtSigma1 * Sigma2 * sqrtSigma1);
ddm = (m1, m2) * (m1, m2);
ddSigma =跟踪(Sigma1 + Sigma2 - 2 * sqrt_temp);
dd = ddm + ddSigma;
结束
首先,这样的代码给问题,因为通常矩阵 sqrtSigma1 * Sigma2 * sqrtSigma1 不是正定。我怀疑这个问题可以固定在两个礼仪:置换第一项,即考虑 * Sigma2 * sqrtSigma1 sqrtSigma1”, 或更换第三项,即通过考虑 sqrtSigma1 * Sigma2 * sqrtSigma1”。 然而aforermentioned纸,和其他文件,给定的公式计算瓦瑟斯坦距离总是写在表单 没有换位,也就是说 不包含任何错误。
在这一点上我试着计算出两个相同的高斯分布的瓦瑟斯坦距离根据以下修改功能
函数Sigma1 (dd) = wass_dist (m1, m2, Sigma2)
sqrtSigma1 =胆固醇(Sigma1);
sqrt_temp =胆固醇(sqrtSigma1 * Sigma2 * sqrtSigma1”);%第三个任期转置
ddm = (m1, m2) * (m1, m2);
ddSigma =跟踪(Sigma1 + Sigma2 - 2 * sqrt_temp);
dd = ddm + ddSigma;
结束
输出,出乎意料的,因为不是零 ddSigma 没有得到一个null值。更准确地说,我试过的输入参数
m1 = (500 500) ' , Sigma1 = 1.0 e + 04 * (1.6767 - -0.3302;-0.3302 - 0.0826)
m2 = 1 , Sigma2 = Sigma1
和相对的输出
dd = 6.6613
在哪里 ddm = 0 ddSigma = 6.6613 。这一事实是一个强烈建议有一些错误在代码中,也许是因为平方根认为不是柯列斯基因素。我也尝试过修改后的版本,第一项是转置,结果更糟。与以前的输入,试验结果
dd = ddSigma = 1.3002 e + 03
问题
它是正确的我的代码来计算方程 吗?如果没有,我怎么能固定吗?
1评论
Ogul可以Yurdakul
Ogul可以Yurdakul 2023年5月16日15:24
嘿,马特奥,
我相信使用 胆固醇() 是你的问题。柯列斯基分解的 Σ 给你一个矩阵 C 这样 (我认为),问题是,这是一个转置平方根。使用对称的多根,这意味着一个矩阵的平方根 年代 这样 可以解决你的问题。我用下面的代码没有问题。
函数(经销)= GW_dist (mu_1、cov_1 mu_2, cov_2)
dist = (mu_1 - mu_2)。‘* (mu_1 mu_2);
dist = dist +跟踪(cov_1 + cov_2 - 2 * (cov_1 ^ 0.5 * cov_2 * cov_1 0.5 ^) ^ 0.5);
dist = dist ^ 0.5;
结束
希望它可以帮助!

登录置评。

答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!