单元二

第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
写 count_label遍历 data,lab 相等则累加。
步骤3
分别统计对水果、蔬菜各调用一次并打印。
步骤4
人工抽查对照卡片确认没有标错再点检查。

六、解题思路

任务:整理已标注样本列表,统计每类有多少个。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

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

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

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

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

七、图形块功能讲解

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

图形块分类作用本课用法
计数循环范围
控制生成一段整数范围,常配合 for 循环。本课编程练习中首次使用,载入后可在工具箱对照。

即时验算:示例 5 条应水果 3、蔬菜 2。把其中一条水果改标蔬菜后,两类 count 应变为 2 与 3。数字与手工清点不一致,先查拆包顺序 name,lab 是否写反。

拆包顺序写反会导致拿标签去当名称比较,count 全错。用一行注释标出“name 在前、lab 在后”,作为本课强制格式。

八、课堂练习

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

  1. 判断:发现蔬菜太少就在代码里把计数改成“看起来好看”;或标注时凭感觉乱贴。

  2. 判断:统计如实反映数据;标错就改样本表;用 count_label 辅助检查平衡。

  3. 判断:数据标错,模型也可能学错。

  4. 判断:数据集通常含采集、标注、整理后的样本。

  5. 判断:统计标签数量与数据是否平衡无关。

  6. 判断:标注就是给样本贴标准答案。

  7. 选择:先贴标签再训练分类 →

九、知识点讲解

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

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

十、编程练习

用下拉列表切换题目;下方 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, "蔬菜"))

十一、本节小结

你现在能用 (名称, 标签) 列表表示数据集,并用 count_label 按标签如实计数;拆包顺序与不平衡报告成为习惯;交叉抽查至少 3 条。accuracy,用测试集检查模型是真会还是背题。