KL発散と比較したWassersteinメトリックの利点を検討する場合、最も明白なものは、KLが対称ではないため(つまりであり、三角形の不等式を満たしません(つまり、一般的に成り立たない)。DKL(P||Q)≠DKL(Q||P)DKL(R||P)≤DKL(Q||P)+DKL(R||Q)
実際の違いは、最も重要なことの1つは、KL(および他の多くの手段)とは異なり、Wassersteinが計量空間を考慮に入れていることです。図に、それを生成するためのコード):
# 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発散で同じですが、Wasserstein距離は、x軸を「道路」として赤の状態から青の状態に確率質量を輸送するために必要な作業を測定します。この測定値は、確率質量が遠くなるほど明らかに大きくなります(エイリアスアースムーバーの距離)。どちらを使用するかは、アプリケーション領域と測定対象によって異なります。注釈として、KL発散の代わりに、適切なメトリックであるJensen-Shannon距離のような他のオプションもあります。