機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。リンクフリーです。

間違いがあれば、ご指摘いただけると幸いです。リンクフリーです
目次へ戻る

【Python実装 - sklearn使用】kNN法による分類の汎化性能

やりたい事

kNN法による分類をkを変化させてグラフを書いてみます。

データを訓練データとテストデータに分割

引数stratifyに均等に分割させたいデータ(多くの場合は正解ラベル)を指定すると、そのデータの値の比率が一致するように分割されます。

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

ソース

import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_breast_cancer

#データセットの生成
cancer = load_breast_cancer()

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

# 訓練データ、テストデータの精度を記録するための配列
training_accuracy = []
test_accuracy = []
# n_neighborsを1から11まで試す
neighbors_settings = range(1, 11)

for n_neighbors in neighbors_settings:
    clf = KNeighborsClassifier(n_neighbors=n_neighbors).fit(X_train, y_train)
    # 訓練データの精度を記録
    training_accuracy.append(clf.score(X_train, y_train))
    # テストデータの精度を記録
    test_accuracy.append(clf.score(X_test, y_test))

plt.plot(neighbors_settings, training_accuracy, label="training accuracy")
plt.plot(neighbors_settings, test_accuracy, label="test accuracy")
plt.ylabel("Accuracy")
plt.xlabel("n_neighbors")
plt.legend()

f:id:olj611:20210422200336p:plain:w500

偉人の名言

f:id:olj611:20210422200745p:plain:w300
努力した者が全て報われるとは限らん。
しかし! 成功した者は皆すべからく努力しておる!!
鴨川源二

参考文献

Pythonではじめる機械学習

動画

なし

目次へ戻る