单元二
第8课 先学后考再打分——训练集、测试集与正确率

一、任务目标
用预测结果和标准答案算正确率,检查模型是真会了还是背题。
二、知识点短列表
- 训练集:用来学习;测试集:用来考试。
- 两堆不应完全相同,否则难发现“只会背题”。
- 正确率=答对数÷总题数,范围通常 0~1。
- 「accuracy」 封装上述计算。
- 正确率高仍要人决定能不能用在真实任务。
- 「len」 作分母;测试集为空时不能除,本课假设至少 1 题。
- preds 与 truths 长度必须相同,否则 zip 会提前结束,分数失真。
三、机器学习在说什么
“检验为准”写进本课程原则:没有测试,就没有资格宣称模型学会了。训练集表现好只说明“复习过的题会做”;测试集才近似“没见过的题”。
小学用列表模拟 preds/truths,刻意避开复杂库,是为了让你亲手数对错。zip 保证第 i 个预测对着第 i 个答案,错位比较会得到荒唐分数。
记住边界:正确率=1 不等于永远正确;样本很少时,分数会跳动。报告成绩时要说明:测了几题、题从哪来。
把“检验为准”落到句子:没有测试集分数,就没有资格说模型学会了;只有训练集分数,只证明复习题会做。zip 对齐是细节,也是诚信——预测列表与答案列表错位,等于拿别人的答卷对分数。
与生活对照:单元测验不能只用课后练习原题当考卷;机器学习同样需要留出“没练过的题”。下一课的预测、再下一课的字典模型,都要准备回答:你怎么考的?
四、相关积木怎么用
- 「preds」:模型猜的标签列表;「truths」:标准答案。
- 「遍历/计数循环」:按维(或按项)重复处理。 对齐比较。
- 「return ok / len」 得到小数正确率。
- 迷你例子:3 题对 2 题 → 「2/3」≈0.666…;全对 → 1.0。
走查:输入 preds=["a","b"]、truths=["a","a"] → 「accuracy」 返回 0.5,因为第一题对、第二题错,答对 1/总题 2。zip 保证第 i 个预测只和第 i 个答案比。
自欺对照:训练集全对只说明会做复习题;测试集分数才接近“没见过的题”。两句话写进正确率报告页眉。
想一想:3 题全对时正确率是多少?写成小数 1.0 还是分数 3/3?本课函数返回哪一种?
检验台词强制说全:我们用××条测试题,正确率=×,测试题与训练集是否重复:是/否。缺任何一句,accuracy 数字作废。函数返回小数(如 1.0、0.5),报告里可同时写“3 题全对”,但代码检查认的是小数。
正确率:分子=答对题数,分母=测试题数,用小数。报告必须写清测了几题、是否与训练集重复。写完先 print(len(preds), len(truths)),长度不等就停,避免 zip 少比抬高分数。
要点串讲:训练集用来学,测试集用来考,二者不宜完全相同;accuracy=答对÷总数;zip 必须对齐;分数是证据不是神谕。本课过关标准:能手算一组 preds/truths 的正确率,并与函数结果一致,还能说出“1.0≠永远正确”。加练:把测试集改成与训练集同题,指出这为何是自欺;再换回未见题,重算 accuracy。
五、操作步骤
六、解题思路
任务:用预测结果和标准答案算正确率,检查模型是真会了还是背题。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。
本课主要用到:屏幕输出。
- 1明确任务「用预测结果和标准答案算正确率,检查模型是真会了还是背题。」:运行后你希望看到什么结果(文字、图形或计算结果)。
- 2用「打印」积木把结果说出来,确认屏幕上出现预期内容。
- 3找出重复动作,用「计数循环/遍历」积木写成循环,少抄几遍。
- 4写出判断条件:什么情况下走 A,什么情况下走 B。
- 5把可复用的一段动作做成函数,主程序里调用它。
- 6对照参考积木(或代码)跑通后,只改一个参数,观察结果如何变化。
流程示意(可对照左侧文字)
七、图形块功能讲解
本课用到的 Mixly 图形块均已在前面的课讲过。请直接对照编程练习搭积木;若有遗忘,回到该积木首次出现的课页复习。
即时验算:preds 与 truths 长度同为 2、一对一对一错时 accuracy=0.5;三题全对为 1.0。把测试集换成训练集原题再宣称 1.0,指出这是自欺,不收成绩。分母是题量不是天数。1.0 不等于永远正确。检验台词四项必须说全。
zip 对齐口诀:第 1 个预测只对第 1 个答案,依此类推。错位一对,整张成绩单作废。提交前强制 print 两个长度;再手算一对样例与函数对照。检验为准,写进原则,不只写进标题。
八、课堂练习
先完成两道正误判断,再做其余题目;选出后点「检查」。
判断:测试集与训练集完全同一批;或只看训练集全对就宣称万能。
判断:留出未见过的测试题;用 accuracy 算分;分数只是证据,人主决定。
判断:测试集和训练集完全相同最好。
判断:正确率=1 就说明现实永远不会错。
判断:正确率等于答对题数除以总题数。
判断:检验为准是本课程重要原则之一。
选择:用带标签例子训练再另卷考试 →
九、知识点讲解
先弄清本课输入与输出,再进编程练习对照现象。
十、编程练习
用下拉列表切换题目;下方 Mixly 默认显示图形化积木。请在 Mixly 工具栏点「运行」;「检查」读取 Mixly 代码自动判题。
参考代码(对照抄写到下方 Mixly)
def accuracy(preds, truths):
ok = 0
for i in range(len(preds)):
p = preds[i]
t = truths[i]
if p == t:
ok = ok + 1
return ok / len(truths)
print(accuracy(["水果", "蔬菜", "水果"], ["水果", "蔬菜", "蔬菜"]))
正在载入编程环境
正在载入 Mixly 图形化编程环境…
十一、本节小结
你现在能区分训练集与测试集,并用 accuracy(preds, truths) 算出 0~1 的正确率;zip 对齐与长度检查成为交卷前习惯;报告写清测了几题。predict_next,用平均值做可解释的数值预测。