kの選び方
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 7/58。
チリに適しているのはどの k でしょうか?いくつか試して、各モデルを2回評価しましょう。学習した行での訓練精度と、未知の行でのテスト精度です。
k = 1 の場合、各チリはそれ自体が最近傍となるため、モデルはデータを記憶します。学習データでは完璧ですが、新しいデータでは性能が低下します。k が非常に大きいと、グループの境界がぼやけます。
ks = range(1, 120, 6)
train_acc = []
test_acc = []
for k in ks:
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
train_acc.append(model.score(X_train, y_train))
test_acc.append(model.score(X_test, y_test))ひとまず、テスト精度が最も高くなる k を選びましょう。第7章では、より公平な評価方法を紹介します。
チャレンジ
簡単あるサッカークラブは、シュートの距離、角度、goal または miss を shots.csv に記録しています。どの k が最もよく予測できるでしょうか?スターターコードはデータを分割し、ks を列挙してグラフにラベルを付けます。
- 各 k についてモデルを学習させ、訓練精度とテスト精度を保存します。
- 以下のように、テスト精度が最も高い k を出力します。
ksに対して両方のリストをプロットし、trainとtestのラベルを付けて、凡例を表示します。
別のクラブの場合:
Best k: 9 (test accuracy 0.783)その後、Coddy があなたのグラフについて説明します。
自分で試してみよう
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# シュート1本につき1行:ゴールまでの距離(m)、ゴールマウスへの角度(度)、得点または失敗
shots = pd.read_csv("shots.csv")
X = shots[["distance_m", "angle_deg"]]
y = shots["result"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
ks = range(1, 42, 4) # k = 1, 5, 9, ..., 41
fig, ax = plt.subplots()
ax.set_title("Shots: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Accuracy")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ