Menu
CoddyTech

k-NNの判定方法

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 6/58。

この章では、k-NNの仕組みを掘り下げます。章の終わりには、あらゆるデータについて、マイルドなチリと辛いチリを示すこの図のようなマップを描けるようになります。

長さと果肉の厚さで示した80個のチリの陰影付きマップ:左側にはモデルが辛いと判定するオレンジ色の領域、右側にはマイルドと判定する青色の領域

新しい唐辛子にラベルを付けるため、k近傍法はそれに最も近いk個の訓練用唐辛子を見つけ、それらが投票します。

新しい唐辛子を黒い星で示した唐辛子のクローズアップ。灰色の線で、最も近い5個の唐辛子と結ばれています。そのうち3個は辛く、2個はマイルドなので、辛い方が勝ちます

最も近いとは、最小の距離を意味します。これはセクション2で出会ったものです。kを選びます。

model = KNeighborsClassifier(n_neighbors=5)

n_neighbors は、別の値を指定しない限り k = 5 です。クラスが 2 つの場合、k が奇数なら同票になることはありません。

challenge icon

チャレンジ

簡単

天文学クラブでは、stars.csvにある星を温度と等級によって矮星と巨星に分類します。スターターコードは、新しい星と k を読み込みます。

  1. 手作業で k 個の最近傍の星を見つけます。distance列を追加してから、並べ替えます。
  2. そのうち巨星がいくつあるかを出力し、次に投票で勝った種類を出力します。
  3. すべての星で学習させた、k の値を使う k-NN モデルで確認します。

別のクラブの星について、k = 5 の場合:

Giants among the nearest 5: 4
By hand: giant
Model: giant

自分で試してみよう

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

# 恒星ごとに1行:温度は千ケルビン単位、等級(値が小さいほど明るい)、矮星または巨星
stars = pd.read_csv("stars.csv")
X = stars[["temp_kK", "magnitude"]]
y = stars["type"]

# 新しい恒星とk
temp = float(input())
mag = float(input())
k = int(input())
new_star = pd.DataFrame({"temp_kK": [temp], "magnitude": [mag]})

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ