You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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,每个元素是单点事件的概率),全变差距离的正确计算公式有两种等价形式:

  1. 求和形式:
    $$
    d_{TV}(P,Q) = \frac{1}{2} \sum_{i} |P_i - Q_i|
    $$
  2. 上确界形式:
    $$
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:27:13