单元二

第6课 水果蔬菜分一分——分类、标签与规则函数

任务场景:把水果卡和蔬菜卡分到两个托盘
任务场景:把水果卡和蔬菜卡分到两个托盘

一、任务目标

把水果卡和蔬菜卡分开,并用函数自动分类。

二、知识点短列表

  • 分类:把样本放到正确类别;类别名=标签。
  • 有监督:先有带标签例子,再学规则或模型。
  • classify(name):输入名称,返回标签字符串。
  • 名单外样本返回 "未知",不要瞎猜。
  • 规则分类器虽简单,接口已与后面字典模型一致:输入→标签。
  • 同一名称不应同时出现在水果名单与蔬菜名单,否则先匹配到的分支会“抢答”。
  • 返回值必须是约定好的标签字符串(如“水果”),不要有时返回 True 有时返回中文。

三、机器学习在说什么

有监督学习的核心是“老师先给对错例子”。水果/蔬菜任务里,老师给的是名称与标签的对应;机器(这里是你的函数)学会后,对新名称给出标签。没有标签,就谈不上这类有监督分类。

规则分类器把“学到的知识”写成 if 与名单。它还不是复杂神经网络,但完整演示了有监督接口:同一函数名 classify,后面可以换成查字典或更复杂模型,调用方式不变。未见过的类别返回未知,是诚信,也是安全边界。

课堂检验标准:对苹果返回水果、对黄瓜返回蔬菜、对汽车返回未知。三者都对,才算分类器诚实可用。

和“普通 if 作业”的差别在于目标:这里 if 不是为了练语法,而是为了实现有监督接口。名单里的例子相当于老师批过的作业;函数相当于学生,对新题给出标签。名单越完整,规则分类器越强,但也越难维护——所以后面会改用字典模型自动记住样本。

把本课结论抄进笔记本:有标签→可做有监督分类;规则分类器=用代码写死的老师经验;未知=诚信输出。缺任一环节,后面的准确率与项目演示都会空转。

四、相关积木怎么用

  • def classify(name): 定义分类接口。
  • 两个列表 fruitsveggies 充当带标签训练知识。
  • if name in fruits: return "水果" 映射到标签。
  • 迷你例子:classify("苹果")水果

走查:输入 classify("黄瓜") → 输出 蔬菜,因为名称在 veggies 名单中,第二个 if 成立并 return。输入 classify("汽车") → 输出 未知,因为两个名单都没有它,落到最后的 return。

想一想:若把“葡萄”从水果名单删掉,再调用 classify("葡萄"),输出应变成什么?

有监督三句:老师给过带标签例子(两份名单);classify 给新输入贴标签;未见过说未知。准备橡皮/校徽等名单外卡片,必须返回未知——返回水果或蔬菜算乱猜,不过关。

要点串讲:有监督=有标签例子教学;分类输出类别名;规则分类器用名单+if 实现 classify;未见样本返回未知才算诚实。本课过关标准:三项测试(水果/蔬菜/未知)一次通过,并能向同桌说明名单相当于老师批过的作业。加练:把葡萄从水果名单删掉再测,观察输出是否变为未知——理解“模型只会名单里的老师经验”。

五、操作步骤

步骤1
列名单写好水果列表与蔬菜列表。
步骤2
写 classify按 in 判断返回水果/蔬菜/未知。
步骤3
试三个样例苹果、白菜、汽车各测一次。
步骤4
点检查确认函数测试三项期望全部通过。

六、解题思路

任务:把水果卡和蔬菜卡分开,并用函数自动分类。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

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

  1. 1明确任务「把水果卡和蔬菜卡分开,并用函数自动分类。」:运行后你希望看到什么结果(文字、图形或计算结果)。
  2. 2用「打印」积木把结果说出来,确认屏幕上出现预期内容。
  3. 3写出判断条件:什么情况下走 A,什么情况下走 B。
  4. 4把可复用的一段动作做成函数,主程序里调用它。
  5. 5对照参考积木(或代码)跑通后,只改一个参数,观察结果如何变化。

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

任务:把水果卡和蔬菜…用「打印」积木把结果说出来,…写出判断条件:什么情况下走…把可复用的一段动作做成函数…对照参考积木(或代码)跑通后,只改一…

七、图形块功能讲解

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

即时验算:classify("苹果")→水果,classify("黄瓜")→蔬菜,classify("汽车")→未知。把葡萄移出水果名单后再测葡萄,应变为未知。四步都对才算名单分类器过关。

八、课堂练习

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

  1. 判断:名单外也随便返回“水果”;或只有 print 没有 return。

  2. 判断:名单外返回“未知”;用 return 交回标签;保持 classify 函数名。

  3. 判断:分类任务里的标签就是类别名称。

  4. 判断:规则分类器已经是复杂深度学习。

  5. 判断:未见过的样本也应硬猜一个标签。

  6. 选择:垃圾分可回收/厨余 →

  7. 选择:不贴标签按兴趣分堆 →

九、知识点讲解

特征是从原始数据里抽出、对判断有用的量;标签是我们想预测的答案。分类就是根据特征给样本贴标签。特征选不好,后面模型再复杂也难做好。

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

十、编程练习

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

参考代码(对照抄写到下方 Mixly)
# 体验:有监督·规则分类器:输入→标签
def classify(name):
    fruits = ["苹果", "香蕉", "橙子", "葡萄"]
    veggies = ["白菜", "萝卜", "土豆", "黄瓜"]
    if name in fruits:
        return "水果"
    if name in veggies:
        return "蔬菜"
    return "未知"

print(classify("苹果"))
print(classify("白菜"))

十一、本节小结

你现在能实现并调用 classify:名单内返回水果/蔬菜,名单外返回未知;三项样例与删名单再测都要会;未知不是失败。(名称, 标签) 数据集与 count_label 做采集标注统计。