energy_distance#
- scipy.stats.energy_distance(u_values, v_values, u_weights=None, v_weights=None)[Quelle]#
Berechnet den Energieabstand zwischen zwei 1D-Verteilungen.
Hinzugefügt in Version 1.0.0.
- Parameter:
- u_values, v_valuesarray_like
Beobachtete Werte in der (empirischen) Verteilung.
- u_weights, v_weightsarray_like, optional
Gewicht für jeden Wert. Wenn nicht angegeben, wird jedem Wert das gleiche Gewicht zugewiesen. u_weights (bzw. v_weights) muss die gleiche Länge wie u_values (bzw. v_values) haben. Wenn die Gewichtssumme von 1 abweicht, muss sie dennoch positiv und endlich sein, damit die Gewichte auf 1 normiert werden können.
- Rückgabe:
- distancefloat
Die berechnete Distanz zwischen den Verteilungen.
Hinweise
Der Energieabstand zwischen zwei Verteilungen \(u\) und \(v\), deren jeweilige Verteilungsfunktionen \(U\) und \(V\) sind, entspricht
\[D(u, v) = \left( 2\mathbb E|X - Y| - \mathbb E|X - X'| - \mathbb E|Y - Y'| \right)^{1/2}\]wobei \(X\) und \(X'\) (bzw. \(Y\) und \(Y'\)) unabhängige Zufallsvariablen sind, deren Wahrscheinlichkeitsverteilung \(u\) (bzw. \(v\)) ist.
Manchmal wird das Quadrat dieser Größe als "Energieabstand" bezeichnet (z. B. in [2], [4]), aber wie in [1] und [3] bemerkt, erfüllt nur die obige Definition die Axiome einer Distanzfunktion (Metrik).
Wie in [2] gezeigt, ist für eindimensionale reellwertige Variablen der Energieabstand mit der nicht verteilungsfreien Version des Cramér-von-Mises-Abstands verbunden
\[D(u, v) = \sqrt{2} l_2(u, v) = \left( 2 \int_{-\infty}^{+\infty} (U-V)^2 \right)^{1/2}\]Beachten Sie, dass das gängige Cramér-von-Mises-Kriterium die verteilungsfreie Version des Abstands verwendet. Siehe [2] (Abschnitt 2) für weitere Details zu beiden Versionen des Abstands.
Die Eingangsverteilungen können empirisch sein, also aus Stichproben stammen, deren Werte effektiv Eingaben der Funktion sind, oder sie können als verallgemeinerte Funktionen betrachtet werden, in welchem Fall sie gewichtete Summen von Dirac-Delta-Funktionen sind, die an den angegebenen Werten lokalisiert sind.
Referenzen
[1]Rizzo, Szekely „Energy distance.“ Wiley Interdisciplinary Reviews: Computational Statistics, 8(1):27-38 (2015).
[2] (1,2,3)Szekely „E-statistics: The energy of statistical samples.“ Bowling Green State University, Department of Mathematics and Statistics, Technical Report 02-16 (2002).
[3]„Energy distance“, https://en.wikipedia.org/wiki/Energy_distance
[4]Bellemare, Danihelka, Dabney, Mohamed, Lakshminarayanan, Hoyer, Munos „The Cramer Distance as a Solution to Biased Wasserstein Gradients“ (2017). arXiv:1705.10743.
Beispiele
>>> 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