ワッサースタイン距離 (Earth Mover's Distance)

Eval

ワッサースタイン距離 (Earth Mover's Distance)

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

1. 定義と直感 #

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

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

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


2. Python による計算例 #

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 距離などの近似解法が実務でよく使われます。


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

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

4. 実務での活用例 #

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

5. 注意点 #

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

まとめ #

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