Wasserstein距離

上級

4.4.3

Wasserstein距離

最終更新 2020-04-08 読了時間 2 分
まとめ
  • ワッサースタイン距離は、質量を移動させるコストとして分布間の差を測ります。
  • 1 次元の例で計算手順を確認し、多次元での近似手法も紹介します。
  • 正規化や計算コストなど実務での注意点を整理します。

1. 定義と直感 #

1 次元離散分布 \(P\) と \(Q\) の 1-Wasserstein 距離は、累積分布関数 (CDF) の差を積分した量として表せます。

$$ W_1(P, Q) = \int_{-\infty}^{\infty} |F_P(x) - F_Q(x)| \, dx $$

多次元の場合は最適輸送問題として定式化され、分布をもう一方へ移す最小コストを求めます。単に平均が異なるだけでなく、ばらつきや形状の違いも反映されます。


2. Python による計算例 #

1
2
3
4
5
6
7
8
9
import numpy as np
from scipy.stats import wasserstein_distance

x = np.random.normal(0, 1, size=1_000)
y = np.random.normal(1, 1.5, size=1_000)

dist = wasserstein_distance(x, y)

print(f"Wasserstein distance: {dist:.3f}")

scipy.stats.wasserstein_distance は 1 次元の距離を計算します。多次元の場合は pot(Python Optimal Transport)ライブラリの Sinkhorn 距離などの近似解法が実務でよく使われます。


計算例(1D 離散分布) #

2 つのヒストグラム \(P = [0.4, 0.3, 0.2, 0.1]\) と \(Q = [0.1, 0.2, 0.3, 0.4]\) の Wasserstein 距離を CDF 差の絶対値として計算します。

| ビン | \(P\) | \(Q\) | CDF(P) | CDF(Q) | |CDF差| | | — | —: | —: | —: | —: | —: | | 1 | 0.4 | 0.1 | 0.4 | 0.1 | 0.3 | | 2 | 0.3 | 0.2 | 0.7 | 0.3 | 0.4 | | 3 | 0.2 | 0.3 | 0.9 | 0.6 | 0.3 | | 4 | 0.1 | 0.4 | 1.0 | 1.0 | 0.0 |

$$W_1 = 0.3 + 0.4 + 0.3 + 0.0 = 1.0$$
1
2
3
4
from scipy.stats import wasserstein_distance
print(wasserstein_distance([1,2,3,4], [1,2,3,4],
                           [0.4,0.3,0.2,0.1], [0.1,0.2,0.3,0.4]))
# 1.0

他の分布距離との比較 #

指標特徴サポート不一致時
Wasserstein形状+位置の差を直感的に測る有限値(安定)
KL ダイバージェンス情報量的な距離、非対称無限大になりうる
JS ダイバージェンスKL を対称化常に有限
ヘリンガー距離平方根で 0〜1 に正規化常に有限

Wasserstein は KL と異なり、分布のサポートが重ならなくても有限値を返すため、生成モデル(WGAN)の損失関数に採用されています。


3. 特長と比較ポイント #

  • 形状の違いに敏感:平均が同じでも分散やモードの数が異なれば距離が大きくなります。
  • ロバスト性:KL のようにサポートがずれて無限大になることがなく、外れ値にも比較的強い指標です。
  • 計算コスト:高次元では最適輸送の計算が重いため、Sinkhorn 正則化などの高速化手法を活用します。

4. 実務での活用例 #

  • 生成モデル評価:生成分布と実データの差異を総合的に把握。
  • 品質検査・シミュレーション:ヒストグラム全体の違いを捉えたい場面で有効。
  • 時系列モニタリング:期間ごとの分布変化を追跡し、閾値を超えたらアラートを出す。

5. 注意点 #

  • 数値スケールが大きいと距離も大きくなるため、標準化や正規化を行ってから比較すると解釈しやすくなります。
  • 距離が小さくても平均や分散の差が残る場合があるため、他指標との併用が推奨されます。
  • Sinkhorn 距離は正則化パラメータの設定で結果が変わるため、比較目的に応じてチューニングしましょう。

まとめ #

ワッサースタイン距離は、位置と形の両方を考慮して分布の違いを測る指標です。1 次元では手軽に計算でき、多次元でも近似解を活用すれば実務に取り入れられます。KL や JS など他の距離と組み合わせて、分布比較を多角的に行いましょう。

分布の差と Wasserstein 距離 #

2 つの分布の差を変えると各距離指標がどう変化するか確認できます。