单元三

第13课 点归到更近中心——最近邻一步归堆

任务场景:把彩色点归到更近的中心
任务场景:把彩色点归到更近的中心

一、任务目标

给定两个中心,把新点归到更近的那堆。

二、知识点短列表

  • 中心:一堆的代表点。
  • 最近邻思想:离谁近就归谁(本课两中心版)。
  • nearer(point, c1, c2) 返回 1 或 2。
  • 距离仍可用曼哈顿:差的绝对值之和。
  • 需要标准标签时,优先有监督。
  • 本课约定 d1 <= d2 时归中心 1,用来打破距离相等的平局。
  • 返回 1/2 是堆编号;给人看的中文堆名可以事后再贴。

三、机器学习在说什么

聚类算法常重复:分配点→更新中心→再分配。小学抓住分配这一步:比较到各中心的距离,选最小者。这已足够理解“无标签如何自动分组”。

返回编号 1/2 而不是中文标签,是为了强调:堆名可以事后由人命名。函数里距离相等时本课约定归中心1(d1 <= d2)。

单元收束:无标签→归堆;相似→距离;归堆→近中心。下一单元换跑道:用奖励信号学习。

把三课压缩成操作口令:先决定要不要标签;若不要,就选特征;算距离;比到中心的远近;归堆;最后由人给堆起名。口令能背,无监督单元就算过关。

边界再次钉死:考试等级、垃圾类别名已经规定时,不要用聚类“假装发现”。聚类发现的是结构,不是标准答案。若老师已经公布“及格/不及格”标签,却仍用 nearer 乱分,属于选型错误,不是算法错误。

四、相关积木怎么用

  • 内部函数 dist 算曼哈顿。
  • if d1 <= d2: return 1,否则 return 2
  • 迷你例子:点 (1,1) 近 (0,0)→1;点 (9,9) 近 (10,10)→2。

走查:输入 nearer([1,1],[0,0],[10,10]) → 输出 1,因为到 c1 的曼哈顿距离 2 小于到 c2 的 18。输入 nearer([9,9],[0,0],[10,10]) → 输出 2,因为到 c2 更近。

返回编号不是最终中文标签:1/2 可事后命名为“运动堆/阅读堆”。需要考试等级标签时,改走有监督,勿用 nearer 硬判及格。

样例锚点:(1,1)→1、(9,9)→2 必须口算与函数双过。单元口令无标签→归堆、相似→距离、归堆→近中心再背一遍。

平局规则再默写:d1<=d2 时归中心1。把规则、两组样例、选型红线三行抄在同一页。本课只练分配一步,不更新中心——局限写进笔记。nearer 名称提醒:归到距离更近的那一个中心。

内部 dist 用曼哈顿,与上一课公式一致,避免一套课两种距离定义。

想一想:点恰好到两中心距离相等时,本课 nearer 返回 1 还是 2?依据是哪条比较?

单元三课串讲口令:无标签→归堆;相似→距离;归堆→近中心。nearer 只完成分配一步,不更新中心。需要标准对错标签时改有监督。口令+平局规则(d1<=d2 归 1)+两组样例口算,三项全过才算本课结业。

动作四步:到 c1 距离、到 c2 距离、比大小、返回编号。口算与 nearer 不一致时查坐标、abs 与 <= 平局规则。需要及格标签时用有监督,只有先看聚成几团才用 nearer。

要点串讲:中心代表一堆;nearer 比较到两中心距离并返回 1/2;相等时归 1;这是聚类分配一步;需要标准对错标签时优先有监督。本课过关标准:口算与函数对同一点结论一致,并能说出单元三课口令。加练:点恰好落在两中心中垂线上时,说明本课 <= 约定如何打破平局。

五、操作步骤

步骤1
定两中心在纸上标出 c1、c2 坐标。
步骤2
写 nearer算到两中心距离并比较。
步骤3
测两点验证期望返回 1 与 2。
步骤4
选型反思若已有标签,说明为何改用有监督。

六、解题思路

任务:给定两个中心,把新点归到更近的那堆。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

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

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

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

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

七、图形块功能讲解

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

即时验算:nearer([1,1],[0,0],[10,10])→1;nearer([9,9],…)→2。到两中心距离相等时返回 1。需要及格标签的任务改选有监督,不把 nearer 当判分器。返回 1/2 不是中文标签。真实聚类还会更新中心。本课明确只练分配一步。

手算表:点|d1|d2|归堆。至少填 (1,1) 与 (9,9) 两行,与函数返回值勾对。真实聚类还会更新中心,本课不做;把“只练分配一步”写进局限,避免以为已经学完全部聚类。

八、课堂练习

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

  1. 判断:不算距离只凭眼睛;或有标准标签却坚持无监督硬分堆。

  2. 判断:用距离选近中心;需要明确对错标签时优先有监督。

  3. 判断:无监督学习适合先发现组别。

  4. 判断:需要明确对错标签时,优先有监督。

  5. 判断:距离相等时本课 nearer 归中心1。

  6. 选择:点归到更近中心 →

  7. 判断:聚类一步等于已经训练好深度网络。

九、知识点讲解

点归到更近中心——最近邻一步归堆:对照任务看清输入、判断与可观察输出;改一处输入,确认输出跟着变。
  • 能用自己的话复述:输入是什么、按什么规则变、输出应怎样。
  • 练习时改一处、看一处,确认现象和概念对得上。

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

十、编程练习

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

参考代码(对照抄写到下方 Mixly)
def dist(a, b):
    return abs(a[0] - b[0]) + abs(a[1] - b[1])

def nearer(point, c1, c2):
    d1 = dist(point, c1)
    d2 = dist(point, c2)
    if d1 <= d2:
        return 1
    else:
        return 2

print(nearer([1, 1], [0, 0], [10, 10]))
print(nearer([9, 9], [0, 0], [10, 10]))

十一、本节小结

你现在能实现 nearer:比较到两中心的曼哈顿距离并返回 1 或 2,相等时归 1;只练分配不更新中心;并完成点|d1|d2|归堆手算表;(1,1)→1、(9,9)→2 双过。需要标准标签时改有监督;单元口令三句能背;平局归中心 1。下一单元用 函数「choose_action」 与 step 进入奖励驱动的强化学习。