再考:ユークリッド距離 — 理論・実務・最新技術で「正しく」使いこなすガイド
ユークリッド距離の数学的定義からGISや機械学習での実務的な使い方、高次元データでの落とし穴(距離集中)の最新研究、近似最近傍(ANN)ライブラリの現状まで、実務者と研究者の両方が「ここでしか得られない」洞察を得られるように解説します。
目次
- 01はじめに:なぜ今、ユークリッド距離を“再考”するのか?
- 02まずは定義を正確に — ユークリッド距離を一行で
- 03実務チェックリスト:使う前に必ず確認すべき6点
- 04GISでの実装と落とし穴(ArcGISを例に)
- 05機械学習での典型的な利用ケースと注意点
- 06「次元の呪い」と距離の集中 — 研究で分かっていること
- 07現場で効く“実践的な対処法”(チェックリスト+コード例)
- 08スケールさせる:近似最近傍(ANN)ライブラリと最新動向
- 09学習ベースの距離(メトリック学習):ユークリッド距離を“意味ある”空間で使う
- 010ケーススタディ(短め)
- 011まとめ:いつユークリッド距離が“最適”か
はじめに:なぜ今、ユークリッド距離を“再考”するのか?
ユークリッド距離は「2点間の直線距離」という直感的な定義のため、データ解析や地理情報処理、機械学習の出発点として広く使われています。しかし一方で、実務でハマりやすい落とし穴(スケーリング・投影誤差・次元の呪い)や、スケールの大きな近似検索技術の登場により「使いどころ」を正しく見極めることが重要になりました。本稿では数学的基礎から最新の実装・研究動向まで、実務で役立つ観点を重点的に紹介します。
まずは定義を正確に — ユークリッド距離を一行で
H2: 定義(数学的)
x,y∈Rn\mathbf{x},\mathbf{y}\in\mathbb{R}^nx,y∈Rn に対してユークリッド距離は
d(x,y)=∑i=1n(xi−yi)2d(\mathbf{x},\mathbf{y})=\sqrt{\sum_{i=1}^n (x_i-y_i)^2}
d(x,y)=i=1∑n(xi−yi)2
です。これは L2L^2L2 ノルムに対応し、三角不等式・対称性・正定性を満たす「メトリック(距離関数)」です。数学的背景や距離空間としての性質については入門系の解説がまとまっています。
実務チェックリスト:使う前に必ず確認すべき6点
- 単位とスケール:特徴量ごとに単位が異なるなら標準化が必須。未正規化だと一部の変数に距離が支配される。
- 欠損値と外れ値:ユークリッド距離は外れ値に敏感。外れ値処理(トリミングやロバストスケーリング)を検討。
- 次元数:10〜20次元でも距離集中の影響が現れる場合がある(下節参照)。
- データの性質:カテゴリ変数や順序尺度には距離が意味をなさない。
- 空間データの投影:GISでは座標の投影単位(度・メートル)を確認。ArcGIS の Euclidean Distance 関数はラスタ単位で「直線距離(as-the-crow-flies)」を計算します—投影が不適切だと実距離とズレます。
- スケーラビリティ:点数が増えるほど全対距離計算は高コスト。近似索引を検討(後述)。
GISでの実装と落とし穴(ArcGISを例に)
ArcGIS の Euclidean Distance ツールは、ソースから各セルまでの最近接距離を「セル中心 → セル中心」で計算し、結果は入力ラスタの投影単位(メートル・フィート 等)で返されます。方向(azimuth)や割り当て(allocation)など出力オプションもあり、空間解析で便利です。ただし重要な注意点は「投影」と「NoData」の扱い:地理座標(緯度経度)のまま実行すると度を単位とした“直線距離”になり、実距離(メートル)とは一致しません。実運用では適切な投影(UTM 等)に変換してから距離解析を行うのが正攻法です。
機械学習での典型的な利用ケースと注意点
H3: k-NN / k-means の標準的利用
- k-NN分類:クラス割当てのために最近傍点を見つける。簡便だが、特徴スケールに敏感。
- k-means:クラスタ中心と点のユークリッド距離の二乗和を最小化する問題設定(平方距離を使うことで最適化上扱いやすくなる)。
H3: いつコサイン類似度やマンハッタン距離に切り替えるか
- ベクトルが**方向性(角度)**を重視する埋め込み(テキスト埋め込み等)ではコサイン類似度が有利。
- スパースかつ座標ごとの独立性が重要ならマンハッタン(L1)が堅牢な場合がある。
「次元の呪い」と距離の集中 — 研究で分かっていること
高次元データでは距離が“平均値に収束”し、最小距離と最大距離の差が小さくなる現象(距離の集中)が起きます。Beyer ら(1999)はこの現象が近傍探索の有効性を損なう条件を示し、実データでも10〜15次元程度から問題が表面化するケースがあることを報告しています。これは「単純にユークリッド距離を用えば良い」という常識を疑わせる重要な警告です。対策としては**次元削減(PCA/オートエンコーダ)や変数選択、特徴学習(埋め込み学習)**が有効です。
現場で効く“実践的な対処法”(チェックリスト+コード例)
実践チェック(順序)
- EDA(分布確認):各次元の分布・スケール・外れ値を確認。
- スケーリング:標準化(zスコア)または Min-Max、あるいはロバストスケーリング。
- 相関・冗長の確認:高相関変数は次元削減でまとめる。
- 次元削減:PCA や t-SNE/UMAP(可視化向け)、オートエンコーダ(非線形)。
- 埋め込み学習:教師ありなら Siamese / Triplet 等で距離空間を学習(後述)。
- 近似索引:データ量が多ければ ANN(FAISS / HNSW / ScaNN)を採用。
最小限の Python 例(距離計算)
import numpy as np
def euclidean(a, b):
return np.linalg.norm(a - b)
a = np.array([1.0, 2.0, 3.0])
b = np.array([2.0, 0.0, 4.0])
print(euclidean(a, b)) # 出力: 2.449...
(実運用では scikit-learn の NearestNeighbors、faiss、scann などを使うのが効率的)
スケールさせる:近似最近傍(ANN)ライブラリと最新動向
近年、Billion-scale のベクトル検索が現実的になり、ユークリッド(L2)や内積(IP)を前提としたライブラリが成熟しています。代表的なもの:
- Faiss(Meta):大規模ベクトル検索と GPU サポートで実運用に広く使われています。実装とチューニングが豊富。
- HNSW(Hierarchical Navigable Small World):グラフベースで高リコールかつ高速。最近は HNSW をベースにするライブラリ(hnswlib 等)が人気。
- ScaNN(Google):ScaNN とその改良(SOAR など)は速度・精度の実用的トレードオフで注目されています。クラウドベンダーのマネージドソリューションにも組み込まれています。
実務TIPS:HNSW はリアルタイム追加(動的更新)に比較的強く、FAISS は量子化(PQ)と組み合わせるとメモリ効率が良くなる。ScaNN は大規模クラウドサービスでの実績が増えています。用途に応じて「リコール重視」「レイテンシ重視」「メモリ制約」を優先して選択してください。
学習ベースの距離(メトリック学習):ユークリッド距離を“意味ある”空間で使う
生の特徴空間では距離が意味をなさない場合、埋め込み(embedding)を学習してからユークリッド距離を使うアプローチが非常に有効です。Siamese ネットワーク(one-shot 学習)、トリプレットロス(FaceNet 等)が代表例で、「似ているもの同士が L2 空間で近くなる」ように学習します。こうして得た埋め込み空間では、単純なユークリッド距離が強力な類似指標になります。
ケーススタディ(短め)
事例A:都市分析(GIS)
道路網や建物点群に対して ArcGIS の Euclidean Distance を使い「最寄り施設までの距離マップ」を作成する場合、入力の投影(地理座標→適切な投影)とラスタ解像度の選定が結果の精度を決めます。特に山岳地などで斜面距離や道路網距離(ネットワーク距離)が必要な場合、単純なユークリッド距離では誤った意思決定を導くので注意。
事例B:レコメンデーション(大規模埋め込み+FAISS)
商品埋め込みを FAISS にインデックスして L2 検索を行う構成。埋め込みは事前に正規化してコサイン類似度に合わせるか、L2そのまま使うかで設計が分かれる。量子化を使ってメモリを圧縮すると検索品質と速度のトレードオフが発生する。
まとめ:いつユークリッド距離が“最適”か
- 直感的で高速、数学的性質が明確:小〜中規模、かつ特徴が同スケールなら第一選択になり得ます。
- しかし:スケールの異なる変数、高次元、地理投影の誤り、カテゴリ変数混在などの条件下では慎重に。Beyer らが指摘する距離集中問題を念頭に、前処理・次元削減・埋め込み学習・ANN を組み合わせることで、ユークリッド距離の有用性を最大化できます。
