Cuando se consideran las ventajas de la métrica de Wasserstein en comparación con la divergencia de KL, la más obvia es que W es una métrica mientras que la divergencia de KL no lo es, ya que KL no es simétrica (es decir, en general) y no satisface la desigualdad del triángulo (es decir, no se cumple en general).D K L ( R | | P ) ≤ D K L ( Q | | P ) + D K L ( R | | Q )reKL( PEl | El | Q)≠ DKL( Q | | P)reKL( R | | P) ≤ DKL( Q | | P) + DKL( R | | Q )
En cuanto a la diferencia práctica, una de las más importantes es que, a diferencia de KL (y muchas otras medidas), Wasserstein tiene en cuenta el espacio métrico y lo que esto significa en términos menos abstractos puede explicarse mejor con un ejemplo (no dude en omitirlo) a la figura, código solo para producirlo):
# 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()
Aquí las medidas entre las distribuciones roja y azul son las mismas para la divergencia KL, mientras que la distancia de Wasserstein mide el trabajo requerido para transportar la masa de probabilidad del estado rojo al estado azul usando el eje x como un "camino". Obviamente, esta medida es mayor cuanto más lejos esté la masa de probabilidad (de ahí la distancia del alias del motor de tierra). Entonces, cuál desea utilizar depende de su área de aplicación y de lo que desea medir. Como nota, en lugar de la divergencia KL también hay otras opciones, como la distancia de Jensen-Shannon, que son métricas adecuadas.