衡量模型效能

使用 scikit-learn 進行監督式學習

George Boorman

Core Curriculum Manager, DataCamp

衡量模型效能

  • 在分類中,accuracy 是常用指標

  • Accuracy:

正確預測 ÷ 總觀測數

使用 scikit-learn 進行監督式學習

衡量模型效能

  • 要如何量測 accuracy?

  • 可用訓練分類器時的資料來計算

  • 但無法反映泛化能力

使用 scikit-learn 進行監督式學習

計算 accuracy

將資料分成 training set 與 test set

使用 scikit-learn 進行監督式學習

計算 accuracy

在 training set 上訓練分類器

使用 scikit-learn 進行監督式學習

計算 accuracy

用 test set 計算 accuracy

使用 scikit-learn 進行監督式學習

Train/test split

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 進行監督式學習

模型複雜度曲線

accuracy 對應鄰居數的折線圖;k 增加時,訓練與測試 accuracy 皆下降

使用 scikit-learn 進行監督式學習

模型複雜度曲線

折線圖中的箭頭指向 13 個鄰居,表示該點的測試集 accuracy 最佳

使用 scikit-learn 進行監督式學習

一起來練習吧!

使用 scikit-learn 進行監督式學習

Preparing Video For Download...