单元六

第19课 记录我的一天活动——训练测试小闭环

任务场景:把身边的活动记录做成小项目数据
任务场景:把身边的活动记录做成小项目数据

一、任务目标

把一天活动标注后训练字典模型,再在测试对上算分。

二、知识点短列表

  • 项目闭环:采集→标注→训练→测试。
  • train(data):学成字典模型。
  • test(model, pairs):用测试对算正确率。
  • 要能说清数据来源与检验方法。
  • 分数是证据,人主决定是否采用。
  • train 得到的字典模型,未见过的活动名 get 会得到 None,与标准答案比较时算错。
  • 测试对数量为分母;至少准备 2 题,避免“只测 1 题就宣称学会”。

三、机器学习在说什么

综合课把有监督字典模型再跑一遍,重点是“说得清流程”。评委老师会问:数据谁标的?测试题从哪来?错了怎么办?

train 用字典推导式压缩写入;test 用 get 比较。测试期望 0.5 的例子故意含一道错题,提醒你:分数会揭露问题。

与第10课呼应:同样是字典模型,这里强调项目表达与检验叙事。

闭环检查表:采集是否合规→标注是否互查→train 是否只使用训练部分→test 是否用未见组合→分数如何解读→人是否决定采用。六格都打勾,才算综合课项目,而不是“会跑一段代码”。小组互评时互相追问:“你的测试对里有没有训练集原题?”答不上来就退回重做。

若测试分为 0.5,不要先改测试函数凑 1.0,先回头看标注与训练是否泄露、测试对是否出题合理。分数难看是朋友,虚假满分是陷阱。

四、相关积木怎么用

  • model[item[0]] = item[1] 循环写入字典完成训练。
  • model.get(x) == y 判对。
  • 迷你例子:两题对一题 → 正确率 0.5。

走查:test(train([('a','1'),('b','2')]), [('a','1'),('b','9')]) → 返回 0.5,因为第一题对、第二题标准是 9 但模型里 b 对应 2。train 只负责写入,test 负责按对计算分。

活动四条再默写:早读/写作业→学习,打球/跑步→运动。测试勿全抄训练原句。分数难看先查标注,再查是否泄露,最后才怀疑除法。

检查锚点:嵌套表达式得到 0.5 时,能指出 b 那一对错在标签 9 对不上 2。全对应为 1.0。

闭环再念:采集→标注→train→test→人主决定。展板三栏与叙事三句同时过关才给星章;伪造分数取消结业资格。至少2道测试题,1道题的满分无说服力。

想一想:若测试两题全对,test 应返回多少?写成小数。

应返回 1.0。展板三栏与叙事三句同时过关才给星章。0.5 案例必须能指出错对:哪一对标签不符。禁止通过缩短测试集或改 test 函数分子来“美化”分数——诚信与正确率课同一条红线。

叙事三句:数据来源与条数;train 后测几题得多少分;是否采用及理由。0.5 时先指出哪一对错再改数据。泄露检查:测试题勿与训练题完全相同,至少改一道名称或场景。

要点串讲:项目闭环采集→标注→train→test;要写清来源与检验;分数难看先查数据与出题,不伪造满分;人主决定是否采用。本课过关标准:三栏展示板填满,且 test 示例得到 0.5 时能解释含义。加练:把测错的那一对改正标签后重测,观察分数上升,强调问题常在数据不在除法。

五、操作步骤

步骤1
采集标注写出一天活动的(名称, 标签)。
步骤2
train得到字典模型。
步骤3
test在测试对上算分并打印。
步骤4
写说明三句话:来源、分数、是否采用。

六、解题思路

任务:把一天活动标注后训练字典模型,再在测试对上算分。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

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

  1. 1明确任务「把一天活动标注后训练字典模型,再在测试对上算分。」:运行后你希望看到什么结果(文字、图形或计算结果)。
  2. 2用「打印」积木把结果说出来,确认屏幕上出现预期内容。
  3. 3找出重复动作,用「计数循环/遍历」积木写成循环,少抄几遍。
  4. 4写出判断条件:什么情况下走 A,什么情况下走 B。
  5. 5把可复用的一段动作做成函数,主程序里调用它。
  6. 6对照参考积木(或代码)跑通后,只改一个参数,观察结果如何变化。

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

任务:把一天活动标注…用「打印」积木把结果说出来,…找出重复动作,用循环积…写出判断条件:什么情况下走…把可复用的一段动作做成函数…

七、图形块功能讲解

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

即时验算:test(train([('a','1'),('b','2')]), [('a','1'),('b','9')])→0.5。展板三栏填满:来源、测法、是否采用。指出错的是哪一对,改标签后分数应上升。train 只写入,test 才算分。展板三栏必填。叙事三句与展板三栏这两项内容都必须齐全。

train 用字典推导写入;test 用 get 比较。未见过的 x 得到 None,与 y 不等算错。至少 2 道测试题;1 道题的 1.0 没有说服力。诚信:不改 test 函数凑分。

八、课堂练习

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

  1. 判断:说不清数据来源;或只用训练集自测却宣称泛化完美。

  2. 判断:写清来源与测试方法;用 test 算分;人主决定采用与否。

  3. 判断:项目中应能说清数据来源与检验方法。

  4. 判断:train 之后仍需要测试。

  5. 判断:正确率是决定上线的唯一条件,人不用管。

  6. 选择:活动名称带标签再训练 →

  7. 判断:闭环包含采集、标注、训练、测试。

九、知识点讲解

闭环指「输入 → 处理 → 输出」连成完整一圈,并能再次接收下一次输入:听见口令/按下按键 → 识别或判断 → 播报、亮灯或动作 → 回到可继续交互的状态。语音交互、播报只是环上的环节,不是并列的三个知识点;任一环缺失,交互就会断掉。
  • 自检:改一个输入,输出是否跟着变?变完能否继续听下一次?
  • 排错:先看有没有输入,再看判断条件,最后看播报/执行是否接到。

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

十、编程练习

用下拉列表切换题目;下方 Mixly 默认显示图形化积木。请在 Mixly 工具栏点「运行」;「检查」读取 Mixly 代码自动判题。

参考代码(对照抄写到下方 Mixly)
data = [("早读", "学习"), ("打球", "运动"), ("写作业", "学习"), ("跑步", "运动")]

def train(data):
    model = {}
    for i in range(len(data)):
        item = data[i]
        model[item[0]] = item[1]
    return model

def test(model, pairs):
    ok = 0
    for i in range(len(pairs)):
        x = pairs[i][0]
        y = pairs[i][1]
        if model.get(x) == y:
            ok = ok + 1
    return ok / len(pairs)

model = train(data)
score = test(model, [("早读", "学习"), ("打球", "运动")])
print(score)

十一、本节小结

你现在能实现 traintest 闭环,说清数据来源与正确率含义,填满展板三栏;0.5案例能指出错对;并在分数不佳时先查标注而不是改分母;至少两道测试题;不改 test 凑分;来源三句话写清。can_collect 挡住敏感字段。