scipy.stats.

energy_distance#

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

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

在版本 1.0.0 中添加。

参数:
u_values, v_values类数组

(经验性) 分布中观测到的值。

u_weights, v_weights类数组,可选

每个值的权重。如果未指定,则为每个值指定相同权重。 u_weights(相应地为 v_weights)的长度必须与 u_values(相应地为 v_values)相同。如果权重和与 1 不同,则它仍必须为正且有限,以便可以将权重归一化以使其和为 1。

返回值:
distancefloat

计算出的分布之间距离。

说明

两个分布 \(u\)\(v\) 之间的能量距离,其各自的 CDF 为 \(U\)\(V\),等于

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

那里 \(X\)\(X'\)(响应。\(Y\)\(Y'\))是独立随机变量,其概率分布是 \(u\)(响应。\(v\))。

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

如同在 [2] 中所示,对于一维实值变量,能量距离与克拉默-冯·米塞斯距离的无分布自由版本相关

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

请注意,普通的克拉默-冯·米塞斯准则使用距离的无分布自由版本。有关距离的两个版本的更多详细信息,请参见 [2](第 2 节)。

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

参考

[1]

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

[2] (1,2,3)

Szekely “E 统计:统计样本的能量”。Bowling Green 州立大学,数学和统计学系,技术报告 02-16 (2002)。

[4]

Bellemare、Danihelka、Dabney、Mohamed、Lakshminarayanan、Hoyer、Munos “克拉默距离作为偏沃特斯坦梯度的解决方案”(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