本文へスキップ
BecomeCoder

Python AIコース · 第3章 分類 ― カテゴリを当てる · レッスン10

k近傍法(k-NN)

ブラウザで完結

導入

**k近傍法(k-NN)**は、いちばん直感的な分類手法です。新しいデータを「近くにある既知のデータ」の多数決で分類します。「似たものは同じ仲間だろう」という発想です。

説明

KNeighborsClassifiern_neighbors(=k)で、いくつの近所を見るかを決めます。

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier

iris = load_iris()
X, y = iris.data, iris.target

model = KNeighborsClassifier(n_neighbors=3)   # 近い3件で多数決
model.fit(X, y)

# 架空の花の寸法で予測(がく長, がく幅, 花びら長, 花びら幅)
new_flower = [[5.0, 3.4, 1.5, 0.2]]
print("予測品種:", model.predict(new_flower)[0])
print("品種名:", iris.target_names[model.predict(new_flower)[0]])

k-NN は学習時に難しい計算をせず、予測のときに「近いk件」を探して多数決するだけ。シンプルですが、意外とよく当たります。n_neighbors を大きくすると、より広い範囲の多数決になり、判断がなめらかになります。

やってみよう

new_flower の数値を、花びらが大きい値(例:[6.5, 3.0, 5.5, 2.0])に変えて、予測される品種が変わることを見てみましょう。n_neighbors17 にした違いも試してください。

演習

KNeighborsClassifiern_neighbors5 にして学習し、[[6.0, 2.7, 5.1, 1.6]] の予測品種(番号)を表示してください。

ヒント1を見る

KNeighborsClassifier(n_neighbors=5) で学習後 model.predict([[6.0, 2.7, 5.1, 1.6]])

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、scikit-learn で本物の機械学習モデルをその場で訓練できます。scikit-learn を使う回は初回の読み込みに時間がかかります(数十秒かかることがあります)。本文の例をそのまま試したり、数値を書き換えたりして、結果の変化を確かめましょう(グラフ内の文字は英字で書きます)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。