单元二
第7课 给样本贴对标签——数据采集、标注与统计

一、任务目标
整理已标注样本列表,统计每类有多少个。
二、知识点短列表
- 采集:把现实样本变成可记录的数据。
- 标注:给样本贴上标准答案标签;标错则学错。
- 数据集常写成 (名称, 标签) 元组的列表。
- 「count_label」:数某标签出现次数,检查数量与平衡。
- 指南强调小学实践采集与标注,不只要会喊口号。
- 元组 (名称, 标签) 里顺序固定:先名称后标签;拆包时变量名也要按这个顺序。
- 两类数量相差过大叫不平衡,训练前应补采或说明局限,不能假装没看见。
三、机器学习在说什么
有监督的“老师”就是标注。没有可靠标签,再强的算法也在学噪声。课堂里用元组列表模拟数据集,是为了让你看见:每一行都是一个带答案的例子。
统计不是花活:它回答“我们有没有足够多、足够均衡的例子”。若水果 20 条、蔬菜 2 条,模型可能几乎只会喊水果。先 count,再训练,是专业习惯的缩小版。
本课函数只数标签,不改标签。发现错误应回到数据表修正,而不是在统计函数里“凑数字”。
采集与标注在指南里被单列强调,是因为小学阶段最容易犯的错不是“不会调用大模型”,而是“数据随手写、标签随嘴叫”。一条白菜标成水果,后面所有基于这份数据的 classify/train 都会被污染;统计函数的职责是把污染暴露出来,而不是掩盖。
课堂操作建议:两人互查标注——一人读名称,一人只看标签是否合理;再用 count_label 核对两类数量。数量差过大时,先补采,再谈训练。
四、相关积木怎么用
- 「samples = [("苹果","水果"),」 带标签数据集。
- 「遍历/计数循环」:按维(或按项)重复处理。 用下标取出每一对。
- 「lab = data[i][1]」;若等于标签则 「n = n + 1」。
- 迷你例子:水果三条、蔬菜两条时,「count_label」 → 3。
走查:输入 data=[("a","水果"),("b","蔬菜"),("c","水果")] 与 label="水果" → 「count_label」 返回 2,因为只有第 1、3 条的 lab 等于“水果”。名称 a/c 不参与比较,比较的是标签字段。
想一想:若 5 条样本里蔬菜标签写了 2 次,「count_label」 应返回几?
数据工作清单:采集字段是否合规;标注是否两人复核;count 两类是否写进笔记;不平衡是否已说明。四格缺一,数据集不算就绪。count_label 只回答“表里写了几次”,不回答“该不该这样标”——后者必须回到卡片前用眼睛与约定集合解决。
标注检查:名称与实物一致、标签落在约定集合、交叉抽查至少 3 条,然后才跑 count_label。水果 20、蔬菜 2 属不平衡,先报告两类 count,再决定补采——补采也是数据工作。
要点串讲:采集把现实变成记录,标注贴上标准答案,数据集常用(名称, 标签)列表;count_label 暴露数量与平衡问题;标错会学错,统计不能用来造假。本课过关标准:能互查标注并用函数如实统计两类样本数。加练:故意把一条蔬菜标错,看 count_label 会不会仍“数字好看但意义坏了”——统计正确≠标注正确。
五、操作步骤
六、解题思路
任务:整理已标注样本列表,统计每类有多少个。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。
本课主要用到:屏幕输出。
- 1明确任务「整理已标注样本列表,统计每类有多少个。」:运行后你希望看到什么结果(文字、图形或计算结果)。
- 2用「打印」积木把结果说出来,确认屏幕上出现预期内容。
- 3找出重复动作,用「计数循环/遍历」积木写成循环,少抄几遍。
- 4写出判断条件:什么情况下走 A,什么情况下走 B。
- 5把可复用的一段动作做成函数,主程序里调用它。
- 6对照参考积木(或代码)跑通后,只改一个参数,观察结果如何变化。
流程示意(可对照左侧文字)
七、图形块功能讲解
下面只列出本课首次出现的 Mixly 图形块(真积木截图)。已在前面课讲过的不再重复;先认新块,再点「载入」对照拖搭。
| 图形块 | 分类 | 作用 | 本课用法 |
|---|---|---|---|
![]() | 控制 | 生成一段整数范围,常配合 for 循环。 | 本课编程练习中首次使用,载入后可在工具箱对照。 |
即时验算:示例 5 条应水果 3、蔬菜 2。把其中一条水果改标蔬菜后,两类 count 应变为 2 与 3。数字与手工清点不一致,先查拆包顺序 name,lab 是否写反。
拆包顺序写反会导致拿标签去当名称比较,count 全错。用一行注释标出“name 在前、lab 在后”,作为本课强制格式。
八、课堂练习
先完成两道正误判断,再做其余题目;选出后点「检查」。
判断:发现蔬菜太少就在代码里把计数改成“看起来好看”;或标注时凭感觉乱贴。
判断:统计如实反映数据;标错就改样本表;用 count_label 辅助检查平衡。
判断:数据标错,模型也可能学错。
判断:数据集通常含采集、标注、整理后的样本。
判断:统计标签数量与数据是否平衡无关。
判断:标注就是给样本贴标准答案。
选择:先贴标签再训练分类 →
九、知识点讲解
先弄清本课输入与输出,再进编程练习对照现象。
十、编程练习
用下拉列表切换题目;下方 Mixly 默认显示图形化积木。请在 Mixly 工具栏点「运行」;「检查」读取 Mixly 代码自动判题。
参考代码(对照抄写到下方 Mixly)
samples = [
("苹果", "水果"), ("白菜", "蔬菜"), ("香蕉", "水果"),
("萝卜", "蔬菜"), ("葡萄", "水果"),
]
def count_label(data, label):
n = 0
for i in range(len(data)):
lab = data[i][1]
if lab == label:
n = n + 1
return n
print(count_label(samples, "水果"))
print(count_label(samples, "蔬菜"))
正在载入编程环境
正在载入 Mixly 图形化编程环境…
十一、本节小结
你现在能用 (名称, 标签) 列表表示数据集,并用 count_label 按标签如实计数;拆包顺序与不平衡报告成为习惯;交叉抽查至少 3 条。accuracy,用测试集检查模型是真会还是背题。
