「k近傍法」という言葉を機械学習の学習で見かけたとき、その仕組みを直感的にイメージできるでしょうか。
機械学習のアルゴリズムの中でも、k近傍法は最もシンプルで直感的に理解しやすいアルゴリズムの一つです。
分類・回帰・距離計算・教師あり学習——これらすべてがk近傍法と深く関わっています。
本記事では、k近傍法の意味と定義、アルゴリズムの仕組み、分類と回帰への応用、距離の計算方法、kの値の選び方、メリット・デメリットまで、わかりやすく体系的に解説していきます。
機械学習を学び始めた方から、基礎をしっかり固めたい中級者まで、幅広い方に役立つ内容となっているでしょう。
k近傍法の意味と定義——最もシンプルな機械学習アルゴリズムの一つ
それではまず、k近傍法の意味と定義について解説していきます。
k近傍法(k-Nearest Neighbors Algorithm・KNN)とは、新しいデータ点の分類や数値予測を行う際に、そのデータ点に最も近い訓練データのk個を参照し、多数決(分類)または平均(回帰)によって予測を行うアルゴリズムです。
「近傍(Neighbor)」という言葉が示す通り、空間的に近いデータ同士は同じカテゴリに属する可能性が高いという直感的な仮定に基づいています。
k近傍法の基本的な考え方
k近傍法の根底にある考え方は非常にシンプルです。
「類似したデータは類似した結果を持つ」——この原則に基づき、新しいデータに対して訓練データの中から最も近いk個を見つけ、それらの多数意見(分類)または平均値(回帰)を予測値とします。
たとえばk=3で新しいデータの周囲に「クラスA・クラスA・クラスB」の3つの近傍点があった場合、多数決でクラスAと分類します。
k近傍法は訓練フェーズにおいてモデルパラメータの学習を行わず、訓練データをそのまま記憶するだけの「怠惰学習(Lazy Learning)」の代表的なアルゴリズムです。
k近傍法が「怠惰学習」と呼ばれる理由
多くの機械学習アルゴリズムは訓練フェーズで大量の計算を行い、モデルパラメータを学習・圧縮します。
k近傍法は訓練フェーズでは何も計算せずにデータを記憶するだけで、すべての計算を予測フェーズで行います。
このため「訓練が怠惰(Lazy)」という意味で「怠惰学習」と呼ばれています。
逆に言えば、訓練は即座に完了しますが、予測のたびに全訓練データとの距離計算が必要になるという特徴があります。
k近傍法の適用可能な問題の種類
| 問題の種類 | k近傍法の予測方法 | 具体例 |
|---|---|---|
| 分類(Classification) | k個の近傍点の多数決 | 花の種類判定・疾患診断・スパム判定 |
| 回帰(Regression) | k個の近傍点の平均値(または加重平均) | 住宅価格予測・気温予測・売上予測 |
| 異常検知 | 最近傍との距離が大きい点を異常とみなす | 不正検知・品質管理・センサー異常 |
k近傍法のアルゴリズムの仕組み——ステップごとに理解する
続いては、k近傍法のアルゴリズムの具体的な手順について確認していきます。
k近傍法の予測プロセスは非常にシンプルで、4つのステップで完結します。
k近傍法の予測ステップ
k近傍法の予測アルゴリズム(4ステップ)
Step1:訓練データとテストデータの準備
・ラベル付き訓練データを準備する
・予測対象の新しいデータ点(テストデータ)を用意する
Step2:距離の計算
・新しいデータ点と全ての訓練データ点の間の距離を計算する
・距離の計算方法はユークリッド距離・マンハッタン距離などから選択する
Step3:k個の近傍点の選択
・計算した距離を昇順に並べ替え、最も近いk個の訓練データ点を選択する
Step4:予測の決定
・【分類】選択したk個の近傍点のクラスラベルの多数決で予測クラスを決定する
・【回帰】選択したk個の近傍点の目的変数の平均値を予測値とする
k近傍法のアルゴリズムは明示的なモデルを持たず、訓練データそのものが「モデル」として機能するというユニークな特性を持つでしょう。
距離計算の種類——どの「近さ」を使うか
k近傍法において「近さ」を定義するための距離計算方法は複数あり、データの性質に応じた選択が重要です。
| 距離の種類 | 計算式(2点間) | 特徴・適した場面 |
|---|---|---|
| ユークリッド距離 | √Σ(xᵢ−yᵢ)² | 最も一般的・連続値特徴に適する |
| マンハッタン距離 | Σ|xᵢ−yᵢ| | 格子状の移動・外れ値に比較的頑健 |
| ミンコフスキー距離 | (Σ|xᵢ−yᵢ|ᵖ)^(1/p) | ユークリッドとマンハッタンの一般化(p=2でユークリッド・p=1でマンハッタン) |
| ハミング距離 | 異なる値の要素数 | カテゴリ特徴・テキスト比較に適する |
| コサイン距離 | 1−(内積÷(ノルムの積)) | テキスト・高次元ベクトルに適する |
kの値の選び方——バイアスと分散のトレードオフ
k近傍法において最も重要なハイパーパラメータが「k」の値です。
kが小さい(例:k=1)場合、最も近い1点だけを参照するためモデルは訓練データに過度に適合し過学習(高分散・低バイアス)しやすくなります。
kが大きい場合、多くの近傍点の多数決を取るため境界が滑らかになり(低分散・高バイアス)、逆に単純化されすぎてしまう過学習とは逆方向の問題(未学習)が生じます。
kの最適値はクロスバリデーションによって探索するのが標準的なアプローチであり、奇数を選ぶと二値分類での同数の多数決問題を避けられるでしょう。
k近傍法における特徴量のスケーリング——前処理の重要性
続いては、k近傍法を使う際の特徴量スケーリングの重要性について確認していきます。
k近傍法は距離に基づくアルゴリズムであるため、特徴量のスケール(尺度)の違いが予測結果に大きく影響します。
特徴量スケーリングが必要な理由
たとえば「年齢(20〜70歳)」と「年収(200万〜1000万円)」という2つの特徴量がある場合、スケーリングなしでユークリッド距離を計算すると年収の差が距離を支配してしまいます。
年齢の差は最大で50程度ですが、年収の差は最大で800万程度となり、距離計算において年収の影響が圧倒的に大きくなってしまいます。
この問題を解決するために、特徴量を同じスケールに揃える前処理が不可欠です。
代表的なスケーリング手法
k近傍法で使われる主なスケーリング手法
① Min-Maxスケーリング(正規化)
x’ = (x − min) ÷ (max − min)
→ 全特徴量を0〜1の範囲に変換する
→ 外れ値の影響を受けやすいが解釈しやすい
② 標準化(Zスコアスケーリング)
x’ = (x − μ) ÷ σ(μ:平均・σ:標準偏差)
→ 平均0・標準偏差1に変換する
→ 外れ値に比較的頑健で最も広く使われる手法
③ ロバストスケーリング
x’ = (x − 中央値) ÷ IQR(四分位範囲)
→ 外れ値が多いデータに適した頑健なスケーリング
k近傍法を使う際は特徴量のスケーリングが必須の前処理であり、スケーリングなしで使用すると特定の特徴量が距離計算を支配してしまい正しい予測が得られないという点は非常に重要です。
カテゴリ特徴量の扱い方
k近傍法は基本的に数値特徴量の距離計算を前提としていますが、カテゴリ特徴量(名義変数・順序変数)が含まれる場合は適切なエンコーディングが必要です。
名義変数にはOne-Hotエンコーディング・順序変数には順序エンコーディングを適用することで数値化し、適切な距離計算が行えるようになります。
ただし高カーディナリティ(カテゴリ数が多い)の名義変数をOne-Hotエンコーディングすると次元数が大幅に増加し、「次元の呪い」を引き起こすリスクがあります。
k近傍法のメリットとデメリット——使い所と限界を正確に把握する
続いては、k近傍法のメリットとデメリットについて確認していきます。
k近傍法を適切に活用するためには、その強みと弱みを正確に理解することが重要です。
k近傍法のメリット
k近傍法には複数の重要なメリットがあります。
第一に、アルゴリズムが非常にシンプルで直感的に理解しやすく、実装も容易です。
第二に、訓練フェーズが即座に完了します。データを記憶するだけで学習が完了するため、データが追加・更新された場合に再訓練のコストがかかりません。
第三に、非線形な決定境界を自然に扱えます。線形分離不可能なデータに対しても、kと距離指標の選択によって柔軟な予測が可能です。
第四に、多クラス分類に追加の工夫なく対応できます。多数決を取るだけでクラス数に関わらず分類が可能です。
k近傍法のデメリット
k近傍法には重要なデメリットもあります。
最大のデメリットは予測時の計算コストの高さです。新しいデータ点の予測のたびに全訓練データとの距離を計算するため、訓練データが大きいと予測速度が著しく低下します。
次元の呪い(Curse of Dimensionality)も深刻な問題です。特徴量の次元数が増えると、高次元空間でのデータは「等しく遠い」状態になり、距離の概念が意味を失いやすくなります。
| メリット | デメリット |
|---|---|
| シンプルで理解・実装が容易 | 予測時の計算コストが高い(O(n)) |
| 訓練が即座に完了 | 次元の呪いに弱い(高次元データに不向き) |
| 非線形な決定境界に対応 | スケーリングが必須(前処理の手間) |
| 多クラス分類に追加工夫不要 | 欠損値・外れ値に敏感 |
| ハイパーパラメータがkのみ | 大量のメモリが必要(全訓練データを保持) |
k近傍法の実装と改良——実務での使い方
続いては、k近傍法の実践的な実装と改良手法について確認していきます。
scikit-learnによるk近傍法の実装
Pythonの機械学習ライブラリscikit-learnには、k近傍法の実装(KNeighborsClassifier・KNeighborsRegressor)が含まれており、数行のコードで簡単に利用できます。
主要なハイパーパラメータとしてn_neighbors(kの値)・metric(距離の種類)・weights(距離加重の有無)などが設定でき、クロスバリデーションと組み合わせた最適なk値の探索も容易に実装できます。
scikit-learnのk近傍法実装では、KD木(kd-tree)やボールツリー(ball-tree)などの空間分割データ構造を使って近傍探索を高速化するオプションも提供されています。
重み付きk近傍法——距離に応じた影響力の調整
標準的なk近傍法では選ばれたk個の近傍点すべてが等しい影響力を持ちますが、「距離の逆数」を重みとして使う「重み付きk近傍法」ではより近い点ほど大きな影響力を持ちます。
重み付きk近傍法はkの選択に対してより頑健になり、特に回帰問題での予測精度を向上させる効果があります。
近似最近傍探索——大規模データでの計算効率化
大規模データセットでの予測速度問題を解決するために、「近似最近傍探索(Approximate Nearest Neighbor・ANN)」アルゴリズムが開発されています。
Faiss・Annoy・HNSWlibなどのライブラリは、厳密な近傍ではなく近似的な近傍を高速に探索することで、大規模データでも実用的な速度でk近傍法を実行できます。
画像検索・推薦システム・意味的な類似文書検索など、大規模な高次元ベクトルの近傍探索には近似最近傍探索が不可欠な技術となっています。
k近傍法の重要ポイントまとめ
・定義:新しいデータの最近傍k個を参照して予測する怠惰学習アルゴリズム
・分類:k個の多数決・回帰:k個の平均値が予測の基本方式
・距離計算:ユークリッド距離が標準・データ特性に応じた選択が重要
・特徴量スケーリングは必須の前処理(標準化またはMin-Maxスケーリング)
・kの選択:クロスバリデーションで探索・バイアスと分散のトレードオフを意識
・限界:予測時の計算コスト・次元の呪い・大量のメモリ消費
まとめ
本記事では、k近傍法の意味と定義から、アルゴリズムの仕組み・距離計算の種類・kの選び方・特徴量スケーリングの重要性・メリットとデメリット・実装と改良手法まで体系的に解説してきました。
k近傍法は「最もシンプルな機械学習アルゴリズムの一つ」として機械学習の入門に最適な手法であるとともに、適切な前処理と距離指標の選択によって実務でも有効に機能する実用的なアルゴリズムです。
シンプルさゆえの制限(計算コスト・次元の呪い)も正確に理解したうえで、問題の規模や特性に応じてk近傍法が適切かどうかを判断することが機械学習の実践的なスキルにつながります。
本記事を参考に、k近傍法への理解を深め、機械学習の学習や実務に役立てていただければ幸いです。