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

一、任务目标
把水果卡和蔬菜卡分开,并用函数自动分类。
二、知识点短列表
- 分类:把样本放到正确类别;类别名=标签。
- 有监督:先有带标签例子,再学规则或模型。
classify(name):输入名称,返回标签字符串。- 名单外样本返回
"未知",不要瞎猜。 - 规则分类器虽简单,接口已与后面字典模型一致:输入→标签。
- 同一名称不应同时出现在水果名单与蔬菜名单,否则先匹配到的分支会“抢答”。
- 返回值必须是约定好的标签字符串(如“水果”),不要有时返回 True 有时返回中文。
三、机器学习在说什么
有监督学习的核心是“老师先给对错例子”。水果/蔬菜任务里,老师给的是名称与标签的对应;机器(这里是你的函数)学会后,对新名称给出标签。没有标签,就谈不上这类有监督分类。
规则分类器把“学到的知识”写成 if 与名单。它还不是复杂神经网络,但完整演示了有监督接口:同一函数名 classify,后面可以换成查字典或更复杂模型,调用方式不变。未见过的类别返回未知,是诚信,也是安全边界。
课堂检验标准:对苹果返回水果、对黄瓜返回蔬菜、对汽车返回未知。三者都对,才算分类器诚实可用。
和“普通 if 作业”的差别在于目标:这里 if 不是为了练语法,而是为了实现有监督接口。名单里的例子相当于老师批过的作业;函数相当于学生,对新题给出标签。名单越完整,规则分类器越强,但也越难维护——所以后面会改用字典模型自动记住样本。
把本课结论抄进笔记本:有标签→可做有监督分类;规则分类器=用代码写死的老师经验;未知=诚信输出。缺任一环节,后面的准确率与项目演示都会空转。
四、相关积木怎么用
def classify(name):定义分类接口。- 两个列表
fruits/veggies充当带标签训练知识。 if name in fruits: return "水果"映射到标签。- 迷你例子:
classify("苹果")→水果。
走查:输入 classify("黄瓜") → 输出 蔬菜,因为名称在 veggies 名单中,第二个 if 成立并 return。输入 classify("汽车") → 输出 未知,因为两个名单都没有它,落到最后的 return。
想一想:若把“葡萄”从水果名单删掉,再调用 classify("葡萄"),输出应变成什么?
有监督三句:老师给过带标签例子(两份名单);classify 给新输入贴标签;未见过说未知。准备橡皮/校徽等名单外卡片,必须返回未知——返回水果或蔬菜算乱猜,不过关。
要点串讲:有监督=有标签例子教学;分类输出类别名;规则分类器用名单+if 实现 classify;未见样本返回未知才算诚实。本课过关标准:三项测试(水果/蔬菜/未知)一次通过,并能向同桌说明名单相当于老师批过的作业。加练:把葡萄从水果名单删掉再测,观察输出是否变为未知——理解“模型只会名单里的老师经验”。
五、操作步骤
六、解题思路
任务:把水果卡和蔬菜卡分开,并用函数自动分类。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。
本课主要用到:屏幕输出。
- 1明确任务「把水果卡和蔬菜卡分开,并用函数自动分类。」:运行后你希望看到什么结果(文字、图形或计算结果)。
- 2用「打印」积木把结果说出来,确认屏幕上出现预期内容。
- 3写出判断条件:什么情况下走 A,什么情况下走 B。
- 4把可复用的一段动作做成函数,主程序里调用它。
- 5对照参考积木(或代码)跑通后,只改一个参数,观察结果如何变化。
流程示意(可对照左侧文字)
七、图形块功能讲解
本课用到的 Mixly 图形块均已在前面的课讲过。请直接对照编程练习搭积木;若有遗忘,回到该积木首次出现的课页复习。
即时验算:classify("苹果")→水果,classify("黄瓜")→蔬菜,classify("汽车")→未知。把葡萄移出水果名单后再测葡萄,应变为未知。四步都对才算名单分类器过关。
八、课堂练习
先完成两道正误判断,再做其余题目;选出后点「检查」。
判断:名单外也随便返回“水果”;或只有 print 没有 return。
判断:名单外返回“未知”;用 return 交回标签;保持 classify 函数名。
判断:分类任务里的标签就是类别名称。
判断:规则分类器已经是复杂深度学习。
判断:未见过的样本也应硬猜一个标签。
选择:垃圾分可回收/厨余 →
选择:不贴标签按兴趣分堆 →
九、知识点讲解
先弄清本课输入与输出,再进编程练习对照现象。
十、编程练习
用下拉列表切换题目;下方 Mixly 默认显示图形化积木。请在 Mixly 工具栏点「运行」;「检查」读取 Mixly 代码自动判题。
参考代码(对照抄写到下方 Mixly)
# 体验:有监督·规则分类器:输入→标签
def classify(name):
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
veggies = ["白菜", "萝卜", "土豆", "黄瓜"]
if name in fruits:
return "水果"
if name in veggies:
return "蔬菜"
return "未知"
print(classify("苹果"))
print(classify("白菜"))
正在载入编程环境
正在载入 Mixly 图形化编程环境…
十一、本节小结
你现在能实现并调用 classify:名单内返回水果/蔬菜,名单外返回未知;三项样例与删名单再测都要会;未知不是失败。(名称, 标签) 数据集与 count_label 做采集标注统计。