機械学習の具体的手法
G検定のk近傍法(k-NN):kの決め方と距離の重み付け
k近傍法は、新しいデータに近い訓練データをk個探し、その多数決で分類する手法です。G検定の機械学習の手法で、決定木やSVMと並んで出てきます。このページでは、座標が分かる7つの点を使い、kを変えると予測が変わること、距離で重みを付けると結果が入れ替わること、特徴量の単位で最も近い点が変わることを、実際に計算して確かめます。覚えるのは、近いk個の多数決で決めること、kの大きさで結果が変わること、距離を使うので特徴量の単位をそろえる必要があることの3つです。
このページは試験の学習用の整理です。座標・ラベル・年齢と年収はすべて説明用の架空の例です。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-10-02。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- k近傍法は、新しい点に近いk個の訓練データの多数決で分類する。ラベル付きデータを使う教師あり学習
- kが小さいとノイズに引きずられやすく、大きいと境界がぼやける。全データ数にすると、全体で多いクラスになる
- 距離の逆数で重みを付けると、近い点の影響が大きくなり、多数決の結果が入れ替わることがある
- 距離で近さを決めるので、特徴量の単位をそろえないと、数値が大きい特徴量だけで決まりやすい
- k-meansは名前が似ているが、ラベルを使わない教師なし学習で、別の手法
k近傍法の考え方
scikit-learnの公式ドキュメントは、近傍法の原理を、新しい点に距離が近い訓練標本を一定数見つけ、そのラベルから予測することと説明しています。距離はユークリッド距離が最も一般的で、分類では近傍の単純な多数決で、近傍に最も多いクラスに割り当てます。
ユークリッド距離は、2点の座標の差を2乗して足し、平方根をとったものです。(3, 3)の点と(3, 4)の点なら、横の差が0、縦の差が1なので、距離は1です。公式は、近傍法を、訓練データを覚えるだけで一般的な内部モデルを作らない手法とも述べています。学習の工程がほとんどなく、予測のたびに距離を計算するのが特徴です。
kを変えると予測が変わる
クラスが○と△の7つの点があり、クラスを当てたい新しい点が(3, 3)にあるとします。新しい点からの距離を計算して、近い順に並べました。
| 点 | 座標 | クラス | (3, 3)からの距離 | 計算 |
|---|---|---|---|---|
| P1 | (3, 4) | ○ | 1.00 | √(0²+1²) |
| P2 | (1, 3) | △ | 2.00 | √(2²+0²) |
| P3 | (4, 5) | △ | 2.24 | √(1²+2²) |
| P4 | (1, 5) | △ | 2.83 | √(2²+2²) |
| P5 | (6, 3) | △ | 3.00 | √(3²+0²) |
| P6 | (0, 2) | ○ | 3.16 | √(3²+1²) |
| P7 | (6, 6) | ○ | 4.24 | √(3²+3²) |
近い順にk個を選んで、多数決をとった結果です。
| k | 票の内訳 | 予測 | ひとこと |
|---|---|---|---|
| k=1 | ○ 1票 | ○ | いちばん近いP1だけで決まる。ノイズの点に引きずられやすい |
| k=3 | ○ 1票・△ 2票 | △ | P1・P2・P3。近い順に3点の多数決 |
| k=5 | ○ 1票・△ 4票 | △ | P1〜P5。遠い△も数に入る |
| k=7 | ○ 3票・△ 4票 | △ | 全部の点を使う。結果は全体で多い方のクラスになる |
同じデータでも、k=1では○、k=3以上では△になります。公式ドキュメントは、kの最適値はデータ次第で、一般に大きいkはノイズの影響を抑えるが、分類の境界が不明瞭になると述べています。kは、あらかじめ人が決めるハイパーパラメータです。
距離で重みを付ける
基本の方法は、近い点も遠い点も1票として数えます。公式ドキュメントによると、近い点ほど影響を大きくするために、距離の逆数に比例した重みを付けることもできます。上の例で、k=3の3点を、距離の逆数(1÷距離)で数えます。
- P1(○):距離1.00なので、1÷1.00=1.000
- P2(△):距離2.00なので、1÷2.00=0.500
- P3(△):距離2.24なので、1÷2.24=約0.447。△の合計は約0.947
○の1.000が△の約0.947を上回るので、予測は○になります。同じk=3でも、一様な多数決では△、距離の重み付きでは○です。重み付きにすると、近い1点が遠い2点より強く効くことがあります。ただし、k=5にすると△が4点に増えて合計が約1.634になり、○の1.000を上回って△に戻ります。重みを付けても、kの影響は残ります。
特徴量の単位で近さが変わる
距離は、特徴量の差を2乗して足すので、数値の桁が大きい特徴量ほど距離に強く効きます。年齢と年収で、購入の有無を当てる例で確かめます。新しい人は32歳・年収520万円で、訓練データはX(30歳・500万円・購入)、Y(50歳・520万円・非購入)、Z(31歳・700万円・非購入)です。
| 年収の単位 | Xまでの距離 | Yまでの距離 | Zまでの距離 | いちばん近い点 |
|---|---|---|---|---|
| 年収を万円で表す(500・520・700) | 20.1 | 18.0 | 180.0 | Y(非購入) |
| 年収を百万円で表す(5.0・5.2・7.0) | 2.01 | 18.0 | 2.06 | X(購入) |
年収の単位を万円から百万円に変えただけで、いちばん近い点がY(非購入)からX(購入)に入れ替わりました。万円のときは、年収の差20万円が距離に大きく効き、Xが20.1、Yが18.0です。百万円にすると年収の差は0.2に縮み、年齢の差が主役になります。単位を変えるだけで予測が変わる手法では、特徴量を標準化や正規化でそろえてから距離を計算します。標準化と正規化の違いは、データ前処理の用語として別に整理しておくと取り違えません。
k-meansとの取り違えに注意
名前の似たk-meansとk近傍法は、目的が別です。k近傍法はラベル付きの訓練データから分類・回帰をする教師あり学習で、kは参照する近傍の数です。k-meansはラベルなしのデータをk個のグループに分ける教師なし学習で、kはクラスタの数です。同じkでも、近傍の数かクラスタの数かで意味が違います。問題文に「ラベル付きの訓練データ」「多数決」とあればk近傍法、「あらかじめ指定した数のグループに分ける」「重心」とあればk-meansです。
G検定の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
k近傍法は、教師あり学習と教師なし学習のどちらですか?
分類や回帰に使うk近傍法は、ラベルの付いた訓練データを使う教師あり学習です。scikit-learnの公式ドキュメントも、近傍法を距離の近い訓練標本のラベルから予測する方法として説明しています。名前が似たk-meansは、ラベルを使わずに分ける教師なし学習で、別の手法です。
k近傍法に「学習」の工程はありますか?
ほとんどありません。公式ドキュメントは、近傍法を、訓練データを覚えるだけで一般的な内部モデルを作らない手法と説明しています。予測のたびに、新しい点と訓練データの距離を求めて近い順に並べるため、一般にデータが増えると予測の計算が重くなります。
kは大きいほうがよいのですか?
一概には言えません。公式ドキュメントは、kの最適値はデータ次第で、一般に大きいkはノイズの影響を抑えるが、分類の境界が不明瞭になると述べています。上の例で、k=7にすると全部の点を使うので、結果は全体で数の多い△になります。実務ではk分割交差検証で、複数のkを比べて選びます。
特徴量の数が多いと、k近傍法はどうなりますか?
高次元では「近い点」が見つかりにくくなる次元の呪いの影響を受けます。公式ドキュメントも、高次元の空間では半径ベースの近傍法の効果が下がると述べています。特徴量を減らす主成分分析などの次元削減と組み合わせる場面があります。
