モデルの性能を測定する

scikit-learn による教師あり学習

George Boorman

Core Curriculum Manager, DataCamp

モデルの性能を測定する

  • 分類では、精度は一般的に使用される指標

  • 精度

正解予測数を総観測数で割ったもの

scikit-learn による教師あり学習

モデルの性能を測定する

  • 精度はどのように測定するか?

  • 分類器の学習に使用したデータで精度を算出可能

  • 汎化性能を反映しない

scikit-learn による教師あり学習

計算精度

トレーニングセットとテストセットに分割されるデータ

scikit-learn による教師あり学習

計算精度

訓練セットに分類器を適合させる

scikit-learn による教師あり学習

計算精度

テストセットを使用して精度を計算する

scikit-learn による教師あり学習

学習用/テスト用分割

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=21, stratify=y)
knn = KNeighborsClassifier(n_neighbors=6)
knn.fit(X_train, y_train)
print(knn.score(X_test, y_test))
0.8800599700149925
scikit-learn による教師あり学習

- モデルの複雑度

  • kが大きくなる = モデルがシンプルになる = 未学習につながる可能性あり

  • kが小さくなる = モデルが複雑になる = 過学習につながる可能性あり

k=1、k=9、k=18 の KNN の決定境界を示す散布図

scikit-learn による教師あり学習

モデルの複雑度と過学習・未学習

train_accuracies = {}
test_accuracies = {}
neighbors = np.arange(1, 26)

for neighbor in neighbors:
knn = KNeighborsClassifier(n_neighbors=neighbor)
knn.fit(X_train, y_train)
train_accuracies[neighbor] = knn.score(X_train, y_train) test_accuracies[neighbor] = knn.score(X_test, y_test)
scikit-learn による教師あり学習

結果のプロット

plt.figure(figsize=(8, 6))
plt.title("KNN: Varying Number of Neighbors")
plt.plot(neighbors, train_accuracies.values(), label="Training Accuracy")
plt.plot(neighbors, test_accuracies.values(), label="Testing Accuracy")
plt.legend()
plt.xlabel("Number of Neighbors")
plt.ylabel("Accuracy")
plt.show()
scikit-learn による教師あり学習

モデルの複雑さの曲線

近傍数に対する精度の折れ線グラフ。k が増えるにつれて、学習セットとテストセットの両方の精度が低下する

scikit-learn による教師あり学習

モデルの複雑度の曲線

線グラフ内の矢印が、13個の近傍が最良のテストセット精度を生み出すことを示している

scikit-learn による教師あり学習

練習しましょう!

scikit-learn による教師あり学習

Preparing Video For Download...