单元二

第10课 校园垃圾分类小助手——字典模型训练与预测

任务场景:校园垃圾分类小项目
任务场景:校园垃圾分类小项目

一、任务目标

用标注数据“训练”字典模型,再预测新名称。

二、知识点短列表

  • 最小有监督闭环:训练数据→模型→预测。
  • 「build_model」:从样本学成字典(本课名称不重复)。
  • 「模型预测」:查字典;没有则“未知”。
  • 「model」:安全读取。
  • 项目要能说清:数据从哪来、怎么测、未知怎么处理。
  • 本课假定训练名称不重复;若重复出现,后写入的标签会覆盖先前的值。
  • 「model」 比直接 「model[name]」 安全,键不存在时不会抛错。

三、机器学习在说什么

字典模型把“记住见过的例子”做到极致:见过的名称原样回答,没见过的承认未知。它不会举一反三到近义词,但这正适合小学理解“训练/预测”两个阶段的分工。

真正的垃圾分类系统会用图像特征等,但接口思想相同:先 fit/train,再 predict。本课用透明字典,避免黑箱,让你看见模型里到底存了什么。

单元收束:有标签→可训练;训练后要预测;未知要诚实;人决定是否上线小助手。

把第6–10课串成故事给家长听:先有标签分类,再把标签统计清楚,再学会用正确率考试,再做一次数值预测,最后用字典模型跑通训练与预测。故事说得顺,说明有监督闭环真的进了脑子,而不是只记住五个函数名。

项目答辩三句模板:①数据来自……共几条;②模型是字典,见过的查得到,没见过返回未知;③我们用……测试,人决定是否在校园试用。缺一句就补一句,再展示代码。

四、相关积木怎么用

  • 空字典 「model = {}」,循环 「model[name]=lab」。
  • 预测:「return model」。
  • 迷你例子:训练含纸盒后,「模型预测」→可回收;电池→未知。

走查:先 「model=build_model」,再 「模型预测」 → 可回收,因为字典里已有该键。再 「模型预测」 → 未知,因为 get 找不到键时返回默认值。

想一想:若训练后再追加 ("电池","有害") 并重新 build_model,此时 predict 电池应返回什么?

项目答辩追问三条:模型里现在有几个键?未见过的名称返回什么字符串?若要让电池从未知变有害,你改的是训练表还是手工改字典?答错第三条(去手工改字典)扣分——必须重建 build_model,保持训练/预测两阶段清晰。

闭环口令:采、标、训、测——训是 build_model,回答新样本是 predict。字典模型不会自动认识近义词。更新姿势:改训练表→重新 build_model→再 predict,不要手工改字典却声称训练过。

要点串讲:有监督闭环=训练数据→模型→预测;build_model 写入字典;predict 用 get 默认未知;项目要讲清来源、测法与未知策略。本课过关标准:演示见过与未见过两种预测,并答出“为何未知”。加练:向模型追加一条(电池, 有害)重新 build_model,再 predict 电池,观察从未知变为有害——理解训练更新模型。

五、操作步骤

步骤1
准备 train列出若干(名称, 标签)垃圾样本。
步骤2
build_model写入字典并返回 model。
步骤3
写 predict用 get 提供默认“未知”。
步骤4
演示闭环对见过与未见过名称各预测一次。

六、解题思路

任务:用标注数据“训练”字典模型,再预测新名称。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

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

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

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

任务:用标注数据“训…用「打印」积木把结果说出来,…找出重复动作,用循环积…把可复用的一段动作做成函数…对照参考积木(或代码)跑通后,只改一…

七、图形块功能讲解

下面只列出本课首次出现的 Mixly 图形块(真积木截图)。已在前面课讲过的不再重复;先认新块,再点「载入」对照拖搭。

图形块分类作用本课用法
模型预测
机器学习对新样本给出预测结果。本课编程练习中首次使用,载入后可在工具箱对照。

即时验算:训练含纸盒后 predict 纸盒→可回收;predict 电池→未知。追加(电池,有害)并重建模型后,电池应变为有害。三步演示能口述,项目才算闭合。get 默认未知比直接下标安全。名称重复以后写覆盖。训与测两阶段分清,切勿混淆。

局限声明模板:本模型只会训练集里出现过的名称;近义词不会自动识别;未知表示需要人工或补数据。演示结尾必读这三句,否则评委追问“为什么不会认旧报纸”时无法回答。

八、课堂练习

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

  1. 判断:没见过的垃圾硬猜成可回收;或训练与预测写乱,分不清阶段。

  2. 判断:先 build_model 再 predict;未知返回“未知”;上线前说明局限。

  3. 判断:有监督学习需要带标签的例子。

  4. 判断:未见过的类别,模型可能答未知。

  5. 判断:字典模型训练就是把样本写入字典。

  6. 判断:预测阶段不应再假装认识训练集外的名称。

  7. 选择:校园垃圾已有类别名要自动分 →

九、知识点讲解

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

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

十、编程练习

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

参考代码(对照抄写到下方 Mixly)
train = [("纸盒", "可回收"), ("香蕉皮", "厨余"), ("报纸", "可回收"), ("剩菜", "厨余")]

def build_model(data):
    model = {}
    for i in range(len(data)):
        name = data[i][0]
        lab = data[i][1]
        model[name] = lab
    return model

def predict(model, name):
    return model.get(name, "未知")

model = build_model(train)
print(predict(model, "纸盒"))
print(predict(model, "电池"))

十一、本节小结

你现在能用 build_model 把标注表写入字典,再用 「模型预测」 查询并在未见样本时返回未知;局限三句能口述;更新必须重建模型。下一单元用无标签归堆与距离,处理没有标准类别名的任务。