KL 발산에 비해 Wasserstein 메트릭의 장점을 고려할 때 KL이 대칭이 아니기 때문에 W는 메트릭이고 KL 발산은 그렇지 않다는 것이 가장 분명한 것입니다 (즉, 일반적으로 )이며 삼각형 부등식을 만족하지 않습니다 (예 : 는 일반적으로 보유하지 않습니다.D K L ( R | | P ) ≤ D K L ( Q | | P ) + D K L ( R | | Q )디케이엘( P| | Q)≠ D케이엘( Q | | P)디케이엘( R | | P) ≤ D케이엘( Q | | P) + D케이엘( R | | Q )
실질적인 차이에 관해서, 가장 중요한 것 중 하나는 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 거리와 같은 다른 측정 옵션도 있습니다.