scipy.stats.

能量距离#

scipy.stats.energy_distance(u_values, v_values, u_weights=None, v_weights=None)[源代码][源代码]#

计算两个一维分布之间的能量距离。

Added in version 1.0.0.

参数:
u_values, v_valuesarray_like

在(经验)分布中观察到的值。

u_weights, v_weights类似数组, 可选

每个值的权重。如果未指定,则每个值分配相同的权重。u_weights`(或 `v_weights)的长度必须与 u_values`(或 `v_values)相同。如果权重总和与1不同,它仍然必须是正的且有限的,以便权重可以被归一化到总和为1。

返回:
距离浮动

分布之间的计算距离。

注释

两个分布 \(u\)\(v\) 之间的能量距离,它们的累积分布函数分别为 \(U\)\(V\),等于:

\[D(u, v) = \left( 2\mathbb E|X - Y| - \mathbb E|X - X'| - \mathbb E|Y - Y'| \right)^{1/2}\]

其中 \(X\)\(X'`(分别 :math:`Y\)\(Y'\))是独立随机变量,其概率分布为 \(u`(分别 :math:`v\))。

有时这个量的平方被称为“能量距离”(例如在 [2][4]),但如 [1][3] 所指出的,只有上述定义满足距离函数(度量)的公理。

如[R9c3c89b1919f-2]_所示,对于一维实值变量,能量距离与Cramér-von Mises距离的非分布自由版本相关联:

\[D(u, v) = \sqrt{2} l_2(u, v) = \left( 2 \int_{-\infty}^{+\infty} (U-V)^2 \right)^{1/2}\]

注意,常用的 Cramér-von Mises 准则使用的是距离的无分布版本。关于这两种距离版本的更多细节,请参见 [R9c3c89b1919f-2]_(第2节)。

输入分布可以是经验的,因此来自其值实际上是函数输入的样本,或者它们可以被视为广义函数,在这种情况下,它们是位于指定值处的狄拉克δ函数的加权和。

参考文献

[1]

Rizzo, Szekely “能量距离。” Wiley跨学科评论:计算统计,8(1):27-38 (2015)。

[2]

Szekely “E-统计:统计样本的能量。” 鲍灵格林州立大学,数学与统计系,技术报告 02-16 (2002)。

[4]

Bellemare, Danihelka, Dabney, Mohamed, Lakshminarayanan, Hoyer, Munos “The Cramer Distance as a Solution to Biased Wasserstein Gradients” (2017). arXiv:1705.10743.

示例

>>> from scipy.stats import energy_distance
>>> energy_distance([0], [2])
2.0000000000000004
>>> energy_distance([0, 8], [0, 8], [3, 1], [2, 2])
1.0000000000000002
>>> energy_distance([0.7, 7.4, 2.4, 6.8], [1.4, 8. ],
...                 [2.1, 4.2, 7.4, 8. ], [7.6, 8.8])
0.88003340976158217