ヘリンガー距離 (Hellinger Distance)

Eval

ヘリンガー距離 (Hellinger Distance)

作成日: 最終更新: 読了時間: 1 分
まとめ
  • ヘリンガー距離は確率分布の平方根差に基づく距離で、0~1 の範囲で解釈できます。
  • 離散分布を例に計算手順をまとめ、KL ダイバージェンスとの違いを確認します。
  • ゼロを含む分布や正規化時の注意点を整理します。

1. 定義と性質 #

離散分布 \(P = (p_1, \dots, p_n)\)、\(Q = (q_1, \dots, q_n)\) に対してヘリンガー距離は次で定義されます。

$$ H(P, Q) = \frac{1}{\sqrt{2}} \sqrt{ \sum_{i=1}^n \left(\sqrt{p_i} - \sqrt{q_i}\right)^2 } $$

  • 0 に近いほど分布が類似、1 に近いほど異なる。
  • 対称性と三角不等式を満たすため、メトリックとして扱えます。
  • KL ダイバージェンスと異なり、サポートがずれても有限値になります。

2. Python による計算例 #

import numpy as np

def hellinger(p: np.ndarray, q: np.ndarray) -> float:
    """2 つの確率分布間のヘリンガー距離を返す。"""
    p = np.asarray(p, dtype=float)
    q = np.asarray(q, dtype=float)

    # ゼロ割りを避けるために正規化
    p = p / p.sum()
    q = q / q.sum()

    return float(np.linalg.norm(np.sqrt(p) - np.sqrt(q)) / np.sqrt(2))

p = np.array([0.4, 0.4, 0.2])
q = np.array([0.2, 0.5, 0.3])

print(f"Hellinger distance: {hellinger(p, q):.4f}")

ヒストグラムから距離を求める場合は、まず和が 1 になるように正規化してから平方根差を計算します。


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

  • 対称・メトリック:Jensen-Shannon 距離と同様に対称で三角不等式を満たします。
  • 有限値:分布がゼロを含んでも補間を通じて有限値に収まります。
  • 平方根変換:小さな確率が強調されすぎず、外れ値に対して安定した距離になります。

4. 実務での活用例 #

  • ベイズ推論:事前分布と事後分布の差異を定量化。
  • クラスタリング:確率ベクトル(トピック分布など)間の距離として利用。
  • コンセプトドリフト検知:時系列で得られる分布の変化を監視し、閾値を超えたらアラートを出す。

5. 注意点 #

  • ヒストグラムのビン幅や分割方法によって距離が変わるため、離散化設計を慎重に行います。
  • サンプルが少ない場合はラプラス平滑化などのスムージングを行うと安定します。
  • 他の距離(KL、Wasserstein など)と併用して分布差の特徴を多面的に捉えましょう。

まとめ #

ヘリンガー距離は平方根を活用して確率分布の差を測るメトリックで、0~1 の範囲で直感的に解釈できます。ゼロ確率を含んでも扱いやすく、ベイズ推論や分布監視など多くの場面で活躍します。