单元二

第6课 正确率 accuracy_score 与混淆直觉

任务场景:对答案——猜对了几朵花?
任务场景:对答案——猜对了几朵花?
原理图:正确率 = 猜对条数 ÷ 总条数
原理图:正确率 = 猜对条数 ÷ 总条数

一、任务目标

在测试集上算正确率,并理解「猜错」意味着什么。

二、核心概念讲清楚

accuracy_score(真实y, 预测y) 给出正确率,介于 0~1(或百分比)。它简单直观,但不总适合极不平衡的数据。

  • 先 predict 得到 y_pred
  • 再与 y_true 比较算正确率
  • 正确率高不代表永远最好,还要结合任务看
1得到预测model.predict(X_test)
2准备真实标签y_test
3调用 accuracy_score对比两者
4解读分数0.9 表示大约 90% 正确

三、跟着想一遍(小例子)

若 10 个测试样本对了 9 个,accuracy≈0.9。

易错:拿训练集自己预测自己,把「背下来」当成实力。

正确:在测试集上算 accuracy。

想一想:若 100 人里只有 1 人感冒,模型全猜「没病」正确率也很高——这说明什么?

四、解题思路

任务:在测试集上算正确率,并理解「猜错」意味着什么。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

本课主要用到:屏幕输出。

  1. 1明确任务「在测试集上算正确率,并理解「猜错」意味着什么。」:运行后你希望看到什么结果(文字、图形或计算结果)。
  2. 2用 print 把结果说出来,确认屏幕上出现预期内容。
  3. 3对照参考代码跑通后,只改一个参数,观察结果如何变化。

流程示意(可对照左侧文字)

明确任务「在测试集上算正……用print把结果说出来,…对照参考代码跑通后,只改一…

五、语句功能讲解

本课用到的 Mixly 图形块均已在前面的课讲过。请直接对照编程练习搭积木;若有遗忘,回到该积木首次出现的课页复习。

六、知识点讲解

过拟合是模型把训练集记得太死,换新数据就差。要用没见过的数据检查;好模型是「会举一反三」,不是「只会背题」。

先弄清本课输入与输出,再进编程练习对照现象。

七、编程练习

先理解上面的例子,再在下方 Mixly 运行与检查(含 scikit-learn)。

应看到接近 1 的正确率。

参考代码(对照抄写到下方 Mixly)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0
)
clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print("正确率:", round(acc, 3))
print("测试条数:", len(y_test))

八、课堂练习

先完成两道正误判断,再做其余题目;选出后点「检查」。

  1. 判断:只抄参考代码,不看运行输出,也不改参数验证。

  2. 判断:先跑通,再对照「accuracy_score」改一处输入/参数,确认输出按预期变化;答错小测时读讲解。

  3. accuracy_score 比较的是?

  4. 为什么更看重测试集正确率?

九、本节小结

正确率 = 对的比例;评估请用测试集。