K近傍法 は、KNN や k-NN とも書かれる、機械学習の入門にとても向いているアルゴリズムです。考え方はとても素朴です。新しいサンプルがどのクラスに属するかを判断したいとき、その周りで最も似ているいくつかのサンプルを見て、多数派のクラスを採用します。
KNN を一言で説明するなら、こう言えます。
近くにいるものに似やすい。
たとえば、あなたが新しい街に引っ越してきて、近くで学生向けの朝食店を探しているとします。近所の 5 人に聞いたところ、4 人が同じ店をすすめました。おそらく、まずはその店を信じてみるでしょう。KNN が分類でやっていることも似ています。近くのデータを探し、多数派を見るのです。
1. まず小さな例で理解する
ある果物がリンゴなのかオレンジなのかを判定したいとします。すでに分かっている果物には、次のような特徴があります。
- 重さ
- 色
- 甘さ
- 皮がざらざらしているか
ここに新しい果物が来ましたが、まだ何なのか分かりません。KNN は最初から複雑なルールを作るのではなく、既知の果物の中から「最も似ているもの」を直接探します。
もし最も似ている 5 個の果物のうち、4 個がリンゴで 1 個がオレンジなら、KNN はこの新しい果物をリンゴである可能性が高いと判断します。
ここでの K は、「何個の近傍を見るか」という意味です。K=5 なら、最も近い 5 個のサンプルを見るということです。
2. 簡単なイメージ図
次の二次元の図で直感的に考えてみます。A はリンゴ、O はオレンジ、? は分類したい新しい果物です。
|
|
K=3 と設定した場合、? に最も近い 3 つの点を見ます。その 3 つの近傍に 2 個の A と 1 個の O があるなら、KNN は ? を A、つまりリンゴと判断します。
これが KNN の中心的な流れです。最も近い K 個の近傍を探し、投票する。
3. KNN の基本ステップ
数式を使わずに見ると、KNN の分類手順はおおよそ次のようになります。
- すでにクラスが分かっているデータを用意する
- クラスが分からない新しいサンプルが来る
- それがすべての既知サンプルとどれくらい似ているかを計算する
- 最も似ている K 個のサンプルを見つける
- その K 個の中で最も多いクラスを確認する
- 新しいサンプルをそのクラスに分類する
これが KNN が理解しやすい理由です。一部のモデルのように、最初に大量のパラメータを訓練する必要はありません。KNN は訓練データを保存しておき、判定が必要になった時点で近傍を調べる方法に近いです。
この特徴から、KNN はよく「遅延学習」と呼ばれます。ここでの「遅延」は悪い意味ではありません。訓練段階ではあまり計算せず、主な作業を予測時まで先送りするという意味です。
4. 「近い」とは何か
KNN でいう「近い」は、必ずしも地図上の距離ではありません。多くの場合、「特徴が似ている」という意味です。
果物を判定するなら、重さ、色、甘さが近い 2 つの果物は近いと考えられます。ユーザーの興味を予測するなら、閲覧履歴、クリック傾向、購入記録が似ている 2 人は近いと考えられます。
つまり KNN で重要なのは「空間上の位置」ではなく、サンプルをどう表現するかです。
よく使われる特徴には、次のようなものがあります。
- 商品の価格、重さ、販売数
- ユーザーの年齢、閲覧回数、購入頻度
- 画像の色、質感、形
- テキスト内に特定の単語が出現するか
特徴の選び方が良いかどうかは、KNN の結果に直接影響します。
5. K の値をどう選ぶか
K に固定の正解はありません。データに応じて選ぶ必要があります。
K が小さすぎる場合、たとえば K=1 では、モデルは最も近い 1 個のサンプルを強く信じます。これは敏感すぎることがあります。もしその最も近いサンプルがたまたまノイズなら、判断を間違えやすくなります。
一方で K が大きすぎると、モデルは多くの近傍を見すぎます。遠くてあまり関係のないサンプルまで結果に影響し、分類の境界がぼやけることがあります。
人に意見を聞く場面に置き換えると分かりやすいです。
- 1 人だけに聞く:個別の意見に引っ張られやすい
- 多すぎる人に聞く:状況をよく知らない人まで混ざる
- 近くの関連する数人に聞く:比較的安定しやすい
二値分類では、投票が同数になるのを避けるために 3、5、7 のような奇数の K を選ぶことがよくあります。
6. KNN は分類だけではない
KNN の最も一般的な用途は分類です。たとえば次のような判断に使えます。
- メールが迷惑メールかどうか
- 画像に写っているのが猫か犬か
- ユーザーが離脱しそうか
- レビューが肯定的か否定的か
ただし、KNN は回帰にも使えます。回帰とは、数値を予測することです。
たとえば住宅価格を推定したい場合、その住宅に最も似ているいくつかの住宅を探し、それらの価格を参考にします。クラスに投票するのではなく、近傍の数値を組み合わせて推定します。
簡単に言えば:
- 分類:近傍が投票し、クラスを選ぶ
- 回帰:近傍の数値を参考にし、結果を推定する
7. 重み付き KNN:近い近傍ほど重要
通常の KNN では、それぞれの近傍の投票力はほぼ同じです。しかし現実には、より近い近傍の方が信頼できることが多いです。
たとえば 5 個の近傍のうち、1 個は新しいサンプルとほとんど同じで、残りの 4 個は少し似ているだけだとします。すべてを同じ重さで投票させるのは、あまり自然ではありません。
そこで「重み付き KNN」という考え方があります。近い近傍ほど影響を大きくし、遠い近傍ほど影響を小さくします。
これは直感的にも分かりやすいです。スマートフォンを買うとき、予算、用途、ブランドの好みが自分に近い人の助言は、一般的な意見より参考になりやすいからです。
8. KNN の長所
KNN には、初心者にも理解しやすい長所があります。
- 考え方が直感的で説明しやすい
- 複雑な訓練過程が不要
- 分類にも回帰にも使える
- 境界が不規則な問題にも比較的柔軟
- 新しいデータを追加しやすい
機械学習を学び始めたばかりなら、KNN はとても良い出発点です。「サンプル」「特徴」「距離」「分類」「訓練データ」といった基本概念を理解する助けになります。
9. KNN の限界
KNN には明確な弱点もあります。
第一に、予測が遅くなることがあります。新しいサンプルが来るたびに、多くの既存サンプルと比較する必要があるためです。データ量が大きいと、計算コストが高くなります。
第二に、特徴の尺度に大きく依存します。たとえばある特徴が「収入」で数千から数万の値を取り、別の特徴が「年齢」で数十程度だとします。何も処理しないと、収入という特徴が距離の判断に強く影響しすぎる可能性があります。
そのため KNN を使う前には、異なる特徴を公平に比較できるようにデータを標準化することがよくあります。
第三に、関係のない特徴に影響されやすいです。果物の種類を判定したいのに「購入日」のような無関係な情報を入れると、モデルが混乱することがあります。
第四に、局所的なデータ分布に敏感です。あるクラスのサンプルが特に多い場合、そのクラスが投票で勝ちやすくなることがあります。
10. K-means と混同しやすい
KNN と K-means はどちらも名前に K が入っていますが、同じものではありません。
KNN は教師あり学習です。通常、すでにラベルが付いたデータを使って、新しいサンプルを判断します。
K-means はクラスタリングによく使われます。明確なラベルがないデータを、自動的にいくつかのグループに分ける方法です。
簡単に覚えるなら:
- KNN:近傍を見て、分類または回帰をする
- K-means:中心を探して、データをグループ分けする
11. KNN が向いている場面
KNN は次のような場面に向いています。
- データ量が大きすぎない
- 特徴を数値として表しやすい
- サンプル同士の「似ている度合い」に意味がある
- 説明しやすい基準方法が必要
- 分類の考え方が有効かを素早く試したい
データ量が非常に大きい場合、特徴が非常に多い場合、または予測速度が重要な場合、KNN は最適ではないかもしれません。その場合は、より効率的な近傍探索方法と組み合わせる必要があります。
12. 初心者が覚えておきたいこと
KNN を学ぶとき、最初から複雑な数式に入る必要はありません。まずは次の直感を覚えておけば十分です。
- KNN は「近傍」を使って新しいサンプルを判断する
Kは何個の近傍を見るかを表す- 分類では投票し、回帰では近傍の数値を参考にする
- 特徴選択とデータ標準化が重要
Kが小さすぎるとノイズに弱く、大きすぎると鈍くなりやすい
KNN の価値は、それ自体でいくつかの問題を解けることだけではありません。データをどう表すか、類似度をどう測るか、既存サンプルからどう予測を作るかという、機械学習の基本的な考え方を分かりやすく示してくれます。
「似ているサンプルを探し、その近傍にもとづいて判断する」という点を理解できれば、KNN の中心はもうつかめています。