0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

k-NN(k近傍法)のPythonによる実装

Last updated at Posted at 2021-09-18

k-NN(k近傍法)について説明し、Pythonでの分類タスクにおける簡単なモデル構築を紹介します。

k-NN(k近傍法)とは

あるグループAとグループBがあるとして、その人たちの属性がわかっているとき、どちらのグループに属するか分からない新しい人が来たケースを考えます。
IMG_411A340FD957-1.jpeg

ここでその人がAとBのどちらのグループに属するか考えるとき、その人と属性が近いk人を選び、その人たちがグループAに多いのかそれともグループBに多いのかを調べて、多い方を新しい人のグループにするのがk-NNによる分類方法です。k-NNのkは決定に利用する人数に相当します。k-NNは怠惰学習やとも言われ、訓練データをそのまま覚えて学習させます。

IMG_AB3217C5CDCC-1.jpeg

k-NNのモデル構築

k-NNを使ってモデル構築をしてみます。sklearn.neiborsモジュールのKNeighborsClassifierクラスを使用します。データ例としては乳がんに関するデータセットをload_breast_cancer関数で取得し使用します。

ここではkを1から10まで変化させ、訓練データとテストデータの正解率の変化を見ていまきす。kが小さい時は正解率に差がありますが、6~8あたりで訓練とテストの正解率が近くなります。それ以上増やしてもモデル精度に大きな変化は見られません。精度に改善が見られない場合、あまりkを大きくする必要はないので、本ケースにおいては6~8程度に設定しておくのが良いと考えられます。

# インポート
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.neighbors import  KNeighborsClassifier
from sklearn.model_selection import train_test_split

# データセットの読み込み
cancer = load_breast_cancer()

# 訓練データとテストデータに分ける
X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer.target, stratify = cancer.target, random_state=0)

# 可視化のためのリスト作成
training_accuracy = []
test_accuracy = []

# 学習
for n_neighbors in range(1, 11):
    model = KNeighborsClassifier(n_neighbors=n_neighbors)
    model.fit(X_train, y_train)
    training_accuracy.append(model.score(X_train, y_train))
    test_accuracy.append(model.score(X_test, y_test))

# 可視化
plt.plot(range(1, 11), training_accuracy, label='Training')
plt.plot(range(1, 11), test_accuracy, label='Test')
plt.ylabel('Accuracy')
plt.xlabel('n_neighbors')
plt.legend()

スクリーンショット 2021-09-19 8.20.07.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?