k近傍法(k-Nearest Neighbors, k-NN)は、機械学習における教師あり学習の代表的な分類(Classification)アルゴリズムの一つです。非常にシンプルながら、直感的で効果的な手法として広く使われています。
基本的な考え方
k-NNの核心は、「あるデータ点を分類する際に、そのデータ点に最も近いk個の既知のデータ点(近傍)を参照し、多数決でクラスを決める」という方法です。
アルゴリズムの流れ
-
訓練データを準備する
各データ点には特徴ベクトルと正解ラベルが付いています。 -
分類対象の新しいデータ点が与えられる
-
距離を計算する
新しいデータ点と訓練データの各点との**距離(通常はユークリッド距離)**を計算します。 -
距離が最も近いk個のデータ点を選ぶ
-
多数決をとる
k個の近傍の中で最も多いクラス(ラベル)を、新しいデータ点のクラスとする。
重要なパラメータ
-
k(近傍の数)
小さすぎるとノイズに影響されやすくなり、大きすぎると分類の精度が下がることがあります。一般に、奇数が好まれます(クラス数が2の場合、同数票を避けるため)。 -
距離関数
ユークリッド距離が最も一般的ですが、マンハッタン距離、ミンコフスキー距離なども利用されます。 -
重み付け(任意)
近いデータ点により大きな重みを与える方法もあります(例:距離の逆数で重みをつける)。
k-NNの特徴
| 特徴 | 内容 |
|---|---|
| 学習コスト | 非常に低い(実質的に学習を行わない「遅延学習」) |
| 推論コスト | 高い(全データとの距離を毎回計算) |
| 汎化性能 | データの分布がよく表現されていれば良好 |
| ノイズへの感度 | 高い(外れ値に影響されやすい) |
メリットとデメリット
メリット:
-
実装が簡単で理論も直感的。
-
学習フェーズが不要。
デメリット:
-
データ量が多いと予測時の計算コストが高い。
-
特徴量のスケールに敏感(正規化や標準化が必要)。
-
次元の呪い(高次元データでは距離の意味が希薄になる)。
応用例
-
手書き文字認識(例:MNIST)
-
異常検知
-
レコメンドシステム(類似ユーザーの分析)
-
医療診断(症状が似ている患者を基に診断)
実装例(Python + scikit-learn)
まとめ
k-NNは、**「近くのデータは似たクラスに属する」**という前提に基づいた非常に基本的かつ効果的な分類手法です。ただし、高次元や大規模データに対しては注意が必要です。前処理(正規化)や距離関数の選択も重要です。
生成日:2025/06/01