Se si considerano i vantaggi della metrica di Wasserstein rispetto alla divergenza di KL, la più ovvia è che W è una metrica mentre la divergenza di KL non lo è, poiché KL non è simmetrica (ovvero in generale) e non soddisfa la disuguaglianza del triangolo (cioè D K L ( R | | P ) ≤ D K L ( Q | | P ) + D KDKL( P| | Q)≠ DKL( Q | | P)non vale in generale).DKL( R | | P) ≤ DKL( Q | | P) + DKL( R | | Q )
Per quanto riguarda la differenza pratica, uno dei più importanti è che a differenza di KL (e di molte altre misure) Wasserstein tiene conto dello spazio metrico e ciò che ciò significa in termini meno astratti è forse meglio spiegato da un esempio (sentiti libero di saltare alla figura, codice solo per produrlo):
# 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()
Qui le misure tra le distribuzioni rossa e blu sono le stesse per la divergenza di KL mentre la distanza di Wasserstein misura il lavoro richiesto per trasportare la massa di probabilità dallo stato rosso allo stato blu usando l'asse x come "strada". Questa misura è ovviamente maggiore quanto maggiore è la massa di probabilità (quindi la distanza del motore della terra alias). Pertanto, quale si desidera utilizzare dipende dall'area dell'applicazione e da ciò che si desidera misurare. Come nota, invece della divergenza di KL ci sono anche altre opzioni come la distanza di Jensen-Shannon che sono metriche adeguate.