k-近傍法 (k-NN) - 怠惰学習と距離ベース分類

k-NNは近いk個の多数決で分類するシンプル手法。怠惰学習・kの選び方・距離尺度・k-meansとの違い・次元の呪いなどG検定頻出ポイントを整理。

『k-近傍法 (k-Nearest Neighbors)』は、シンプルで直感的な分類・回帰アルゴリズム。学習せずに予測できる『怠惰学習』の代表例として、G検定で頻出します。

雷門 あかり(普段) 雷門 あかり

k-NNって、近くにある仲間で判断するんでしょ?

六角 いずみ 先生(笑顔) 六角 いずみ 先生

その通り!
k-近傍法(k-NN/k-Nearest Neighbors) は、新しいデータ点に対して『最も近いk個の訓練データ』の多数決でクラスを決める手法よ。

白銀 エマ(普段) 白銀 エマ

特徴的なのは怠惰学習(Lazy Learning) であること。
事前に学習モデルを構築せず、予測時に訓練データすべてとの距離を計算するの。

紫藤 ゆら(びっくり) 紫藤 ゆら

毎回計算するんですかぁ?
それだと遅くなりませんかぁ?

六角 いずみ 先生(普段) 六角 いずみ 先生

その通り。
学習は速い (記録するだけ) けど、予測は遅い (全訓練データとの距離計算)。
データ量が多いと実用的でなくなるの。

白銀 エマ(普段) 白銀 エマ

重要なハイパーパラメータがkの値。
kが小さいと過学習しやすく ノイズに敏感、kが大きいと境界が滑らかになるけど 細かい構造を見逃す。

雷門 あかり(笑い) 雷門 あかり

kってどうやって決めるの?

六角 いずみ 先生(笑顔) 六角 いずみ 先生

一般的には交差検証でkを調整するのよ。
経験則として、クラス数の平方根を初期値にすることもあるわ。
kを奇数にすると同票引き分けを避けられるのも実用的なTipsね。

白銀 エマ(普段) 白銀 エマ

距離の計算方法も重要。
ユークリッド距離(直線距離)、マンハッタン距離(碁盤の目状)、コサイン類似度(角度ベース) など、データの性質で使い分けるの。

紫藤 ゆら(普段) 紫藤 ゆら

あ、k-meansって名前似てますけど、別物ですよねぇ?

六角 いずみ 先生(普段) 六角 いずみ 先生

いい質問!
k-NNは教師あり学習 (分類・回帰)、k-meansは教師なし学習 (クラスタリング)。
名前は似ているけど目的も種類も違うわ。
混同しやすいのでG検定の引っ掛け問題でよく出るのよ。

白銀 エマ(普段) 白銀 エマ

k-NNの弱点は他にも:①次元の呪い(高次元データで距離が無意味化)、②スケール感度(特徴量の単位が違うと支配される ⇒ 正規化必須)、③大規模データで実用性が低い。

雷門 あかり(普段) 雷門 あかり

シンプルなのに落とし穴も多いんだね…

六角 いずみ 先生(笑顔) 六角 いずみ 先生

だからこそG検定で問われるの。
利点は『学習なしで動く』『分類・回帰両方OK』『非線形な境界を表現できる』『実装が簡単』。
レコメンドの基本としても有用よ。

紫藤 ゆら(笑顔) 紫藤 ゆら

k-NNとk-meansの違い、覚えました!

雷門 あかり(笑い) 雷門 あかり

kの選び方が大事ってことだね!
よっしゃ、分かったよ!

六角 いずみ 先生(普段) 六角 いずみ 先生

G検定では『怠惰学習』『kの大小と過学習の関係』『k-meansとの違い』『次元の呪い・正規化必須』を押さえてね。

確認クイズ

k-近傍法 (k-NN) の特徴として正しいものはどれか。

  1. 事前に複雑なモデルを学習し、予測時は高速
  2. 事前学習を行わず、予測時に訓練データとの距離計算を行う『怠惰学習』
  3. 教師なし学習でクラスタリングに用いる
  4. サポートベクトルを利用して分類境界を決定する
こたえを見る

正解: 2. 事前学習を行わず、予測時に訓練データとの距離計算を行う『怠惰学習』

k-NNは怠惰学習 (Lazy Learning)の代表で、事前に学習モデルを構築せず、予測時に全訓練データとの距離を計算します。教師あり学習 (分類・回帰) で、教師なし学習のk-means (クラスタリング) とは別物。サポートベクトルを使うのはSVM。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。