在Matlab中实现TVD:用max函数计算上确界是否正确?
概率测度全变差距离(TVD)的Matlab实现疑问
我正尝试在Matlab中实现概率测度的全变差距离(Total variation distance of probability measures,简称TVD)。请问使用Matlab的max函数来计算下述TVD公式中的“上确界”是否正确?

我的尝试代码:
% Input A =[ 0.444643925792938 0.258402203856749 0.224416517055655 0.309641873278237 0.0730101735487732 0.148209366391185 0.0825852782764812 0.0848484848484849 0.0867743865948534 0.0727272727272727 0.0550568521843208 0.0440771349862259 0.00718132854578097 0.0121212121212121 0.00418910831837223 0.0336088154269972 0.00478755236385398 0.0269972451790634 0.00359066427289048 0.00110192837465565 0.00538599640933573 0.00220385674931129 0.000598444045481747 0 0.00299222022740874 0.00165289256198347 0 0 0.00119688809096349 0.000550964187327824 0 0.000550964187327824 0.00119688809096349 0.000550964187327824 0 0.000550964187327824 0 0.000550964187327824 0.000598444045481747 0 0.000598444045481747 0 0 0 0 0.000550964187327824 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.000550964187327824 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00119688809096349 0.000550964187327824]; P = A(:,1); Q = A(:,2); % Total variation distance (of probability measures) d = max(abs(P-Q))
运行结果:
d = 0.186241721936189
解答
你用max(abs(P-Q))计算TVD的方式是错误的。
正确的TVD定义与计算
对于离散概率测度(对应你代码中的向量P、Q,每个元素是单点事件的概率),全变差距离的正确计算公式有两种等价形式:
- 求和形式:
$$
d_{TV}(P,Q) = \frac{1}{2} \sum_{i} |P_i - Q_i|
$$ - 上确界形式:
$$
d_{TV}(P,Q) = \sup_{A} |P(A) - Q(A)|
$$
这里的上确界是对所有可测集A取的,在离散场景下,最优的A是所有满足$P_i > Q_i$的点的集合,此时$|P(A)-Q(A)|$等于$\frac{1}{2}\sum|P_i-Q_i|$,而非单点的最大绝对差。
你的代码计算的是两个分布在单个点上的最大概率差,这和TVD的定义完全不符。
正确的Matlab代码
% Input A =[ 0.444643925792938 0.258402203856749 0.224416517055655 0.309641873278237 0.0730101735487732 0.148209366391185 0.0825852782764812 0.0848484848484849 0.0867743865948534 0.0727272727272727 0.0550568521843208 0.0440771349862259 0.00718132854578097 0.0121212121212121 0.00418910831837223 0.0336088154269972 0.00478755236385398 0.0269972451790634 0.00359066427289048 0.00110192837465565 0.00538599640933573 0.00220385674931129 0.000598444045481747 0 0.00299222022740874 0.00165289256198347 0 0 0.00119688809096349 0.000550964187327824 0 0.000550964187327824 0.00119688809096349 0.000550964187327824 0 0.000550964187327824 0 0.000550964187327824 0.000598444045481747 0 0.000598444045481747 0 0 0 0 0.000550964187327824 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.000550964187327824 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00119688809096349 0.000550964187327824]; P = A(:,1); Q = A(:,2); % 正确的全变差距离计算 d_tv = 0.5 * sum(abs(P - Q))
运行结果:
d_tv = 0.2429
内容的提问来源于stack exchange,提问作者Ommo
相关产品推荐
相关产品推荐

