k近傍法 — 「ご近所に聞く」だけの分類器
新しい点のラベルを知りたければ、いちばん近い k 個のデータに聞いて多数決すればいい。数式もパラメータ学習も要らないシンプルなアルゴリズムが、k の選び方ひとつで過学習にも単純化しすぎにも化ける — その様子を境界マップと精度カーブで確かめます。
1. 訓練しない機械学習 — 怠惰学習
ロジスティック回帰は訓練でパラメータ w, b を求め、データ本体は捨てました。k近傍法(k-Nearest Neighbors, kNN)は正反対です。訓練段階ではデータを丸ごと覚えるだけで何も計算しません。予測を頼まれた瞬間に初めて、全データとの距離を測って近い順に k 個を選び、多数決します。
このスタイルを怠惰学習(lazy learning)と呼びます。「勉強は一切せず、テスト中に教科書を全部めくる」タイプです。
2. ご近所投票のしくみ
下のデモでマウスを動かすと、「?」の点(分類したい新しい点)の周りから k 本の線が最も近いご近所さんに伸び、破線の円が「k 番目に近い点までの距離」を示します。円の中の色を数えて多数決 — それが予測です。
k を変えると同じ場所でも予測がひっくり返ることがあります。境界付近で試してみてください。
3. 「近い」をどう測るか — 距離の定義
kNN の心臓部は距離関数です。標準は直線距離(ユークリッド距離)ですが、格子状の移動を数えるマンハッタン距離、ベクトルの向きだけを比べるコサイン類似度など、データの意味に合わせて選びます。
4. k が決める境界のかたち
平面のすべての場所について「ここに新しい点が来たら何色か」を塗り分けたのが決定境界マップです。k = 1 では最寄りの1点がそのまま領土を主張するため境界はギザギザで、外れ値のまわりに「飛び地」ができます。k を増やすと多数決が効いて境界はなめらかになり、飛び地は消えていきます。
5. k の選び方 — 過学習と単純化のあいだ
では k はいくつが正解でしょうか。訓練データとは別に取っておいたテストデータで正解率を測りながら、k を 1 から増やしていくとこうなります。
- k が小さすぎる:訓練データでは完璧(k=1 なら自分自身が最近傍なので 100%)なのにテストで失敗 — ノイズまで暗記する過学習。
- k が大きすぎる:遠くの点まで投票に参加し、小さなクラスタが多数派に飲み込まれる — 単純化しすぎ。
6. まとめ
- 怠惰学習:訓練は記憶するだけ。予測時に距離計算 O(N) を払う。
- 予測は k 個の最近傍の多数決。距離の定義とスケーリングが結果を左右する。
- k は複雑さのつまみ:小さい k =ギザギザ境界・過学習、大きい k =なめらか境界・単純化しすぎ。
- ちょうどいい k はデータが決める — 交差検証で探す。