導入
**k近傍法(k-NN)**は、いちばん直感的な分類手法です。新しいデータを「近くにある既知のデータ」の多数決で分類します。「似たものは同じ仲間だろう」という発想です。
説明
KNeighborsClassifier の n_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_neighbors を 1 や 7 にした違いも試してください。
演習
KNeighborsClassifier の n_neighbors を 5 にして学習し、[[6.0, 2.7, 5.1, 1.6]] の予測品種(番号)を表示してください。
ヒント1を見る
KNeighborsClassifier(n_neighbors=5) で学習後 model.predict([[6.0, 2.7, 5.1, 1.6]])。