单元四

第13课 KMeans 聚类(无标签)

任务场景:没有标准答案时,按「长得像」自动分组
任务场景:没有标准答案时,按「长得像」自动分组
原理图:KMeans 按簇中心分组
原理图:KMeans 按簇中心分组

一、任务目标

在没有标签 y 的情况下,把样本分成几簇。

二、核心概念讲清楚

KMeans 指定 k 个中心,反复把点分到最近中心并更新中心。注意:聚类标签编号本身没有「对错含义」。

  • KMeans(n_clusters=k)
  • 无监督:通常没有 y
  • k 需要你指定或尝试
1准备特征 X可先标准化
2设定 k想分几堆
3fit_predict得到簇编号
4观察结果可视化或统计每簇人数

三、跟着想一遍(小例子)

把学生按两门成绩分成 3 组,得到 0/1/2 编号——编号只是组名,不是分数高低。

易错:把簇编号当成「成绩等级」直接解读。

正确:先看每簇特征均值,再解释含义。

想一想:超市把顾客分群做推荐,和 KMeans 目标像吗?

四、解题思路

任务:在没有标签 y 的情况下,把样本分成几簇。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

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

  1. 1明确任务「在没有标签 y 的情况下,把样本分成几簇。」:运行后你希望看到什么结果(文字、图形或计算结果)。
  2. 2用 print 把结果说出来,确认屏幕上出现预期内容。
  3. 3对照参考代码跑通后,只改一个参数,观察结果如何变化。

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

任务:在没有标签y…用print把结果说出来,…对照参考代码跑通后,只改一…

五、语句功能讲解

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

六、知识点讲解

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

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

七、编程练习

先理解上面的例子,再在下方 Mixly 运行与检查(含 scikit-learn)。

应大致分成两堆。

参考代码(对照抄写到下方 Mixly)
from sklearn.cluster import KMeans

X = [[1, 1], [1, 2], [2, 1], [8, 8], [8, 9], [9, 8]]
km = KMeans(n_clusters=2, n_init=10, random_state=0)
labels = km.fit_predict(X)
print("簇标签:", list(labels))
print("簇中心:", km.cluster_centers_.round(2).tolist())

八、课堂练习

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

  1. 判断:只抄参考代码,不看运行输出,也不改参数验证。

  2. 判断:先跑通,再对照「单元四」改一处输入/参数,确认输出按预期变化;答错小测时读讲解。

  3. KMeans 典型特点是?

  4. 簇编号与真实类别编号?

九、本节小结

聚类按相似性分组,不靠 y。