评估模型性能

使用 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 的监督学习

Passons à la pratique !

使用 scikit-learn 的监督学习

Preparing Video For Download...