古典的機械学習

k近傍法 けいきんぼうほう

k近傍法KNN距離ベース学習最近傍探索怠惰学習
k近傍法について教えて

簡単に言うとこんな感じ!

「新しいデータに一番近いk個のデータを探して、その多数決で予測する」シンプルな手法だよ。「周りに猫3匹と犬1匹がいたら猫と判定」みたいな感じ。学習フェーズがなく、予測時に全データと比較するから、データが増えると遅くなるのが弱点なんだ!


k近傍法とは

k近傍法(k-Nearest Neighbors, kNN)は、訓練データに「学習」という処理がなく、予測時に近くのデータを参照して予測するアルゴリズムです。「怠惰学習(Lazy Learning)」とも呼ばれます。


仕組み

新しいデータ点 ★ が来たら:

  ①  訓練データ全体との距離を計算
  ②  距離が小さい上位 k 個を選択
  ③  分類:k個の多数決
     回帰:k個の平均値

例(k=3):
  最近傍:猫 / 猫 / 犬
  → 多数決で「猫」と予測

距離の測り方

距離特徴
ユークリッド距離√Σ(x_i - y_i)²最も一般的
マンハッタン距離Σ|x_i - y_i|高次元に強い
コサイン類似度cos(θ)テキスト・埋め込みに有効

kの選び方

k が小さい → 細かい決定境界、過学習リスク
k が大きい → 滑らかな決定境界、未学習リスク

一般的には:
  - 交差検証で最適なkを探す
  - k は奇数が望ましい(2値分類の同数回避)
  - k = √n がよく使われる経験則(nはサンプル数)

特徴

長所:
  ✓ 実装がシンプル
  ✓ ハイパーパラメータが少ない(kだけ)
  ✓ 非線形な決定境界を自動で表現
  ✓ 訓練が不要(新データをすぐ追加できる)

短所:
  ✗ 予測が遅い(全データと比較するため)
  ✗ 大規模データに向かない
  ✗ 高次元データで精度低下(次元の呪い)
  ✗ スケーリングが必須

歴史と背景

  • 1951年:Fix & Hodgesが最近傍分類を提案
  • 1967年:Cover & Hartが kNN の理論的性質を証明
  • 現在:推薦システムの初期実装異常検知特徴量類似検索に使われる

関連用語