При рассмотрении преимуществ метрики Вассерштейна по сравнению с дивергенцией KL, наиболее очевидным является то, что W является метрикой, а дивергенция KL - нет, поскольку KL не симметрична (т. Е. в общем случае) и не удовлетворяет неравенству треугольника (т.е. D K L ( R | | P ) ≤ D K L ( Q | | P ) + D KDKL(P||Q)≠DKL(Q||P)в общем случае не выполняется).DKL(R||P)≤DKL(Q||P)+DKL(R||Q)
Что касается практических различий, то одним из наиболее важных является то, что в отличие от KL (и многих других мер) Вассерштейн учитывает метрическое пространство, и то, что это означает в менее абстрактных терминах, возможно, лучше всего объяснить на примере (не стесняйтесь пропускать на рисунке, код только для его производства):
# 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()
Здесь измерения между красным и синим распределением одинаковы для дивергенции KL, тогда как расстояние Вассерштейна измеряет работу, требуемую для переноса вероятностной массы из красного состояния в синее с использованием оси x в качестве «дороги». Эта мера, очевидно, тем больше, чем дальше масса вероятности (отсюда и псевдоним движка Земли). То, какой из них вы хотите использовать, зависит от области применения и того, что вы хотите измерить. Как примечание, вместо расхождения KL есть и другие параметры, такие как расстояние Дженсена-Шеннона, которые являются правильными метриками.