ユークリッド距離の完全ガイド:概念・定義・計算・実務活用と代替距離の使い分け
ユークリッド距離とは — 概念と定義
ユークリッド距離(Euclidean distance)は、ユークリッド空間における二点間の「直線距離」を一般化したもので、最も直感的で広く使われている距離の定義です。平面上では、二点を結ぶ最短の線分の長さがユークリッド距離に相当します。n 次元ベクトル x = (x1, x2, …, xn) と y = (y1, y2, …, yn) の間のユークリッド距離 d(x, y) は次の式で与えられます。
d(x, y) = sqrt((x1 − y1)2 + (x2 − y2)2 + … + (xn − yn)2)
この定義は二乗和の平方根をとることで、ピタゴラスの定理を多次元へ拡張したものです。ベクトルのノルム(長さ)を表す2-ノルム(L2ノルム)と密接に関係しており、d(x, y) = ||x − y||2 と表現できます。
数学的性質とメトリック性
ユークリッド距離は「メトリック(距離関数)」の性質を満たします。具体的には、任意の点 x, y, z に対して以下が成り立ちます。
- 非負性: d(x, y) ≥ 0、かつ d(x, y) = 0 ⇔ x = y
- 対称性: d(x, y) = d(y, x)
- 三角不等式: d(x, z) ≤ d(x, y) + d(y, z)
三角不等式は、ユークリッド空間の幾何学的直感に基づく重要な性質で、探索アルゴリズムやクラスタリングの理論的保証に関わります。
計算上の表現と効率化
ユークリッド距離の二乗は計算上よく使われます。二乗距離を用いることで平方根の計算を省略でき、最適化問題(例:k-means のクラスタ中心の更新)で計算効率が向上します。二乗距離は次のように内積を使って展開できます。
d(x, y)2 = ||x||2 + ||y||2 − 2 x・y
この式は、複数点間の距離を行列演算(ベクトル化)で効率的に計算する際に便利です。具体的には、データ行列のノルム平方を事前計算し、内積行列を用いることで O(n^2) のペアワイズ距離計算を高速化できます。
2次元の具体例
例として、A(1, 2) と B(4, 6) の距離を求めます。
d(A, B) = sqrt((1 − 4)2 + (2 − 6)2) = sqrt(9 + 16) = sqrt(25) = 5
このように、平面上ではピタゴラスの定理どおりに距離が計算されます。
IT・データ分析での主な用途
- クラスタリング(例:k-means) — 点の近さの尺度として最も多用されます。特にユークリッド空間前提のモデルで自然です。
- 最近傍探索(k-NN) — 類似サンプルの探索に使われます。学習分類、回帰、レコメンドで頻出。
- 画像処理・コンピュータビジョン — ピクセルや特徴ベクトル間の差を測る際に使用。特徴量が連続値である場合に有効です。
- 異常検知 — 正常データの中心からの距離でスコアリング。
実務上の注意点(スケーリングと次元の呪い)
ユークリッド距離は各次元の単位やスケールに敏感です。異なる単位(例:年齢と収入)をそのまま含むと、値の大きい次元が距離を支配してしまいます。実務では標準化(Zスコア)や min-max 正規化を行うのが一般的です。
また、高次元データでは「次元の呪い」により距離の意味が薄れる問題があります。高次元では点間距離の分散が小さくなり、最近傍と遠方の差が小さくなるため、ユークリッド距離での判別性能が落ちることがあります。次元削減(PCA, t-SNE, UMAP)や特徴選択、あるいは他の距離指標の利用を検討します。
代替距離と使い分け
- マンハッタン距離(L1): 距離がスパース性に強く、ロバスト性が必要な場面で有用。
- コサイン類似度: ベクトルの方向(角度)を比較するため、ベクトル長の違いが重要でない場合に適合。
- マハラノビス距離: 次元間の相関やスケールを考慮し、分散共分散に基づく距離。異方性な分布に強い。
- ハミング距離: カテゴリカル・バイナリデータで一致・不一致を数える場合に使用。
拡張:加重ユークリッド距離・欠損値への対処
加重ユークリッド距離は各次元に重み wi を与えて次のように定義されます。
d(x, y) = sqrt(sum_i wi (xi − yi)2)
重みは重要度や尺度の逆数などに基づいて設定します。欠損値がある場合は、共通の有効次元のみで距離を計算し、次元数でスケール補正する(例:有効次元数で割る)などの実務的処理が必要です。
アルゴリズム上の工夫とスケーラビリティ
大量データや高次元では、単純な全探索 O(N) の最近傍探索はコストが高くなります。代表的な高速化手法:
- kd-tree / ball-tree:低・中次元で効率的(次元が高いと性能劣化)。
- 近似最近傍(LSH、Annoy、Faiss 等):高次元・大規模データに適した近似法。
- ベクトル化と BLAS 利用:ペアワイズ距離は行列演算に落とし込み、GPU やマルチコアで並列化。
- 二乗距離での比較:平方根を取らずに二乗距離の大小比較で判定してコスト削減。
数値安定性と実装上の注意
浮動小数点のオーバーフロー/アンダーフローや丸め誤差に注意が必要です。非常に大きな値同士の差の二乗は不安定になりやすいので、中心化(平均を引く)やスケーリングを行うのが望ましいです。言語やライブラリ(NumPy、scikit-learn、Faiss、Eigen 等)には最適化された実装があるため、できるだけ信頼できるライブラリを利用してください。
よくある誤解
- 「ユークリッド距離が常に最良」ではない:データの性質や目的により別の距離や類似度が適切。
- 「二乗距離とユークリッド距離は同じ」ではない:二乗距離は平方根を取らないため三角不等式を満たさず、厳密にはメトリックではない。
まとめ
ユークリッド距離は直感的で計算もシンプルなため、IT・データ分析分野で広く用いられています。一方で、スケール依存性や高次元における劣化などの課題があるため、前処理(スケーリング、次元削減)、適切なデータ構造や近似検索手法の採用、あるいはマハラノビス距離やコサイン類似度など代替手法の検討が重要です。実装の際は二乗距離の利用、ベクトル化、既存ライブラリ活用による効率化と数値安定性の担保を心掛けてください。
参考文献
- ユークリッド距離 — Wikipedia(日本語)
- 距離空間(Metric space) — Wikipedia(日本語)
- マハラノビス距離 — Wikipedia(日本語)
- 次元の呪い — Wikipedia(日本語)
- scikit-learn: sklearn.metrics.pairwise.euclidean_distances — scikit-learn ドキュメント
- Faiss — Efficient Similarity Search(GitHub)


