Wenn man die Vorteile der Wasserstein-Metrik im Vergleich zur KL-Divergenz betrachtet, ist die offensichtlichste, dass W eine Metrik ist, während die KL-Divergenz keine ist, da KL nicht symmetrisch ist (dh im Allgemeinen) und erfüllt nicht die Dreiecksungleichung (dh D K L ( R | | P ) ≤ D K L ( Q | | P ) + D KDKL( S.| | Q)≠ DKL( Q | | P)gilt im Allgemeinen nicht).DKL( R | | P) ≤ DKL( Q | | P) + DKL( R | | Q )
Was den praktischen Unterschied betrifft, ist einer der wichtigsten, dass Wasserstein im Gegensatz zu KL (und vielen anderen Maßnahmen) den metrischen Raum berücksichtigt und was dies in weniger abstrakten Begriffen bedeutet, lässt sich vielleicht am besten anhand eines Beispiels erklären (Sie können es gerne überspringen) auf die Abbildung, Code nur zur Herstellung):
# define samples this way as scipy.stats.wasserstein_distance can't take probability distributions directly
sampP = [1,1,1,1,1,1,2,3,4,5]
sampQ = [1,2,3,4,5,5,5,5,5,5]
# and for scipy.stats.entropy (gives KL divergence here) we want distributions
P = np.unique(sampP, return_counts=True)[1] / len(sampP)
Q = np.unique(sampQ, return_counts=True)[1] / len(sampQ)
# compare to this sample / distribution:
sampQ2 = [1,2,2,2,2,2,2,3,4,5]
Q2 = np.unique(sampQ2, return_counts=True)[1] / len(sampQ2)
fig = plt.figure(figsize=(10,7))
fig.subplots_adjust(wspace=0.5)
plt.subplot(2,2,1)
plt.bar(np.arange(len(P)), P, color='r')
plt.xticks(np.arange(len(P)), np.arange(1,5), fontsize=0)
plt.subplot(2,2,3)
plt.bar(np.arange(len(Q)), Q, color='b')
plt.xticks(np.arange(len(Q)), np.arange(1,5))
plt.title("Wasserstein distance {:.4}\nKL divergence {:.4}".format(
scipy.stats.wasserstein_distance(sampP, sampQ), scipy.stats.entropy(P, Q)), fontsize=10)
plt.subplot(2,2,2)
plt.bar(np.arange(len(P)), P, color='r')
plt.xticks(np.arange(len(P)), np.arange(1,5), fontsize=0)
plt.subplot(2,2,4)
plt.bar(np.arange(len(Q2)), Q2, color='b')
plt.xticks(np.arange(len(Q2)), np.arange(1,5))
plt.title("Wasserstein distance {:.4}\nKL divergence {:.4}".format(
scipy.stats.wasserstein_distance(sampP, sampQ2), scipy.stats.entropy(P, Q2)), fontsize=10)
plt.show()
Hier sind die Maße zwischen roter und blauer Verteilung für die KL-Divergenz gleich, während der Wasserstein-Abstand die Arbeit misst, die erforderlich ist, um die Wahrscheinlichkeitsmasse unter Verwendung der x-Achse als „Straße“ vom roten in den blauen Zustand zu transportieren. Dieses Maß ist offensichtlich umso größer, je weiter die Wahrscheinlichkeitsmasse entfernt ist (daher der Alias-Abstand des Erdbewegers). Welches Sie also verwenden möchten, hängt von Ihrem Anwendungsbereich ab und davon, was Sie messen möchten. Anstelle der KL-Divergenz gibt es auch andere Optionen wie die Jensen-Shannon-Distanz, bei denen es sich um geeignete Metriken handelt.