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だけ)
✓ 非線形な決定境界を自動で表現
✓ 訓練が不要(新データをすぐ追加できる)
短所:
✗ 予測が遅い(全データと比較するため)
✗ 大規模データに向かない
✗ 高次元データで精度低下(次元の呪い)
✗ スケーリングが必須