← 返回学习索引
Learning · 知识点图解 · 02

让数据物以类聚 聚类 · Clustering

给你一堆没有标签的数据,没人告诉你谁是哪类,你要让机器自己看出「哪些点长得像、该归一堆」——这就是聚类。它属于无监督学习:不靠正确答案,只靠样本之间的相似度来分组。本页建直觉,讲清四大主流算法各自的脾气,以及什么时候该用哪个。

TOPIC · Clustering(无监督学习) · 是什么 → 靠距离分组 → 四大算法 → 怎么选 → 易混点
— 00

聚类是什么

先看一眼画面:聚类就是把「只有坐标、没有名字」的一堆点,按彼此远近自动分成几团。理解了这张图,再区分它和「分类」的关键差别。

mental model

聚类在干嘛

无标签数据 → 自动分组
原始数据:只有点,没有标签 相近的点,自动聚成 3 团 聚类
和「分类」分清楚 unsupervised vs supervised

新手最容易混的就是聚类(clustering)和分类(classification):它们看起来都在「分组」,但一个有老师、一个没老师,目标根本不同。

分类 Classification(有监督)
  • 先有标签:训练数据已经标好「这是猫 / 这是狗」。
  • 学的是规则:从已知答案里学会「怎么把新样本对号入座」。
  • 组是预先定好的:类别名字、有几类,事先就知道。
  • 例:垃圾邮件识别、根据病历判断良性/恶性。
聚类 Clustering(无监督)
  • 没有标签:谁都不知道每个点「正确」属于哪组。
  • 找的是结构:让机器自己发现数据里天然的聚集。
  • 组是跑出来的:有几组、每组什么含义,事后由人解读。
  • 例:把用户按行为自动分群、给文章按主题归堆。
"
定义
聚类 = 在没有标签的数据里,按样本之间的相似度,把它们自动分成若干组,使得同组尽量像、不同组尽量不像。它不预测什么,只揭示数据本身的分组结构。
— 01

聚类靠什么分组

所有聚类算法的共同地基只有一个词:距离。机器没有「像不像」的直觉,它把相似度换算成空间里的远近——离得近 = 相似,离得远 = 不相似。

distance = similarity

把每个样本看成空间里的一个点(有几个特征就是几维),两点之间的距离越小,就越相似。最常用的是欧氏距离,也就是我们最熟悉的「直线距离」——勾股定理量出来的那种。算法做的事,本质都是「让同一簇里点与点的距离尽量小」。

距离欧氏距离就是两点间拉直线的长度,二维下 = √[(x₁-x₂)² + (y₁-y₂)²]。还有曼哈顿距离(走格子)、余弦相似度(看方向,常用于文本)等,选哪种取决于你认为「相似」该怎么定义。
先标准化,几乎是必做 · 如果一个特征是年龄(0~100)、另一个是月收入(0~50000),直接算距离会被收入的大数值完全主导,年龄等于白给。所以聚类前通常要先把各特征缩放到同一尺度(标准化 / 归一化),否则分出来的组只反映了「数值大的那个特征」。

按距离判定归属

量到各簇,归最近的
靠距离判定:量到各簇,归给最近的那一个 琥珀簇 蓝簇 距离近 距离远 ? 新点 离琥珀簇更近 → 这个新点就归琥珀簇
— 02

四大主流算法

它们的差别在于「怎么定义一个簇」。每张卡:左栏讲思路,右栏打个比方帮你记住,底部一行点出它的软肋与适用

the big four

K-means · K 均值

最常用 · 基于中心
思路是什么

人为定好要分几簇(K),随机撒下 K 个「中心点」,然后反复做两件事:把每个点归到最近的中心(分配),再把每个中心移到自己这群点的平均位置(更新)。重复到中心不再动,就分好了。

打个比方

操场上站着 K 个班主任,学生各自跑向离自己最近的老师;老师再走到自己学生堆的正中间;学生重新就近站队……来回几轮,大家就稳定地围成 K 堆。

它怎么转 · 分配 ⇄ 更新 循环到稳定
撒 K 个初始中心 每点归到最近中心 中心移到该群均值 中心是否稳定?
还在动:↺ 回到“每点归到最近中心” 不动了:→ 完成

轮数不固定,中心趋于稳定就自动停

⚠ 软肋 · 要预先定 K;偏爱大小相近的球状簇,遇到细长/环形会切歪;对离群点敏感(一个极端值能把中心拽偏)。胜在快、简单,数据大时首选。

层次聚类 · Hierarchical

不断合并 · 出一棵树
思路是什么

一开始把每个点当成一个独立小簇,然后反复把最近的两个簇合并成一个,簇越并越大,最终并成一棵树状图(dendrogram)。想分几簇?在树的某个高度横切一刀就行——切点决定了簇数。

打个比方

像生物分类树:个体 → 物种 → 属 → 科……一路往上合并。你想要多粗的分类,就在相应高度切一刀:切得低,组多而细;切得高,组少而粗。

⚠ 软肋 · 不用预先定 K(切的时候才定),还能看出层级关系,很适合探索;但计算慢,数据量一大(上万点)就吃力。

DBSCAN · 基于密度

连成片 · 能识别噪声
思路是什么

不靠中心,靠密度:点扎堆密的地方,彼此能「连成片」的归为一簇;待在稀疏地带、连不上任何簇的点,直接判为噪声 / 离群点,不强行归类。因此它能找出任意形状的簇。

打个比方

看夜晚的卫星地图:灯火连成一片的是城市(一个簇),哪怕城市是弯曲的带状;荒野里零星几点孤灯,就是噪声,不属于任何城市。

⚠ 软肋 · 不用定 K、能抓任意形状、自动挑出离群点;但要调「多近算邻居 / 多少点算密」(eps、min_samples)两个参数,且当各簇密度差异很大时表现变差。

GMM · 高斯混合

软聚类 · 给概率
思路是什么

假设数据是由几个高斯「钟形团」叠加而成,算法去反推每个团的位置和胖瘦,然后给每个点算出「属于各个团的概率」。所以它是软聚类:一个点不是非此即彼,而是「70% 像 A、30% 像 B」。

打个比方

只知道身高,猜一个 175cm 的人是男是女:不必硬判,而是说「约 70% 像男生群、30% 像女生群」。两个群在边界处本就重叠,概率比一刀切更贴近真实。

⚠ 软肋 · 簇可呈椭圆(比 K-means 的圆形灵活)、还给出概率归属;但同样要预先定团数,数学上比 K-means 重一些。可看作 K-means 的「概率升级版」。
— 03

横向对比

同一份数据,不同算法切出来可能天差地别。先看一个最能暴露差异的例子,再用一张表把四者并排。

side by side
同一份数据,K-means 切错、DBSCAN 切对 shape matters

数据是「一团核心 + 外面一圈环」。K-means 只会按到中心的距离做直线划分,硬生生把环和核心都劈成两半;DBSCAN 按密度连通,正确认出「核心是一簇、外环是一簇」。这就是为什么 K-means 不等于聚类的全部

环形数据上的对照

K-means vs DBSCAN
K-means(K=2):沿直线硬切 直线分界 环被劈成两半、核心也切开 ✗ DBSCAN:按密度连通 认出「核心团」和「外环」两簇 ✓
四大算法对照表 cheat sheet
对比维度
K-means
层次聚类
DBSCAN
GMM
要预先定簇数?
要,定 K
不用,切树时定
不用
要,定团数
能处理的簇形状
球状/凸形
较灵活
任意形状
椭圆形
离群点 / 噪声
会硬塞进某簇
会硬塞进某簇
自动识别为噪声
低概率归属
归属方式
硬分(非此即彼)
硬分
硬分(或噪声)
软分(给概率)
速度 / 规模
快,适合大数据
慢,适合小数据
中等
中等偏慢
一句话直觉
抢最近的中心
不断并成一棵树
密的连成片
几个钟形团叠加
— 04

分几簇与分得好不好

需要定 K 的算法(K-means、GMM)绕不开两个问题:该分几簇?分完怎么判断好坏?——注意,聚类没有标准答案,这两件事给的都是「参考」。

k与evaluation
先决定分几堆:肘部法 elbow method

试着把 K 取 2、3、4、5……每个 K 都算一遍「簇内的总离散程度」(点离自己中心有多散)。K 越大这个值越小,但下降会越来越不划算。把它画成曲线,会出现一个像手肘的拐点——拐点处的 K 通常就是性价比最高的选择。

提示肘部法只是参考,有时拐点并不明显。最终分几簇,还得结合业务目的:你是想分成「高/中/低」三档,还是要更细的画像?目的不同,合适的 K 也不同。
再看分得好不好:轮廓系数 silhouette score

对每个点问两件事:它离自己簇内的伙伴有多近?又离最近的那个别的簇有多远?「组内紧、组间远」就是好。把所有点综合成一个分数,范围 −1 ~ 1:越接近 1 越好,接近 0 说明簇之间黏在一起,负数则意味着有点被分错了组。

心法 · 没有标签时,这类内部指标 + 降维到 2D 画出来用眼睛看,是判断聚类质量的主要手段。但它们衡量的是「几何上分得整不整齐」,不等于「对你的业务有没有用」——后者只能靠人来判断。
— 05

易混点与上手

几个最容易栽的认知坑,一张「该用谁」的决策卡,以及一条最短的实践路径。

gotchas
常见误区 myth vs fact
聚类和分类差不多,都是分组。
分类有标签、是监督学习,学的是把新样本对号入座;聚类没标签,自己去发现数据里的天然结构,目标完全不同。
聚类 = K-means。
K-means 只是最常用的一种。遇到非球状、带噪声、要层级或要概率时,层次 / DBSCAN / GMM 各有所长。
聚类有唯一正确的答案。
没有「对」的分法,只有「对当前目的有没有用」的分法。换个 K、换个算法,结果就不同,这很正常。
拿到数据直接跑就行。
不同特征量纲差很大时,距离会被大数值主导。绝大多数情况要先标准化,否则结果只反映了数值大的那个特征。
每个点都必须属于某一簇。
DBSCAN 会把稀疏点判为噪声(不归任何簇);GMM 给的是概率归属(软分),都不强求非此即彼。
该用哪个 which one
✓ K-means 就够用

数据大致成团 / 球状、规模大要跑得快、且能大致估计有几类——这是最省心的默认选择。

✗ 该换别的

形状怪 / 带噪声 → DBSCAN;想要层级关系或不确定 K → 层次聚类;想要概率归属 / 椭圆簇 → GMM。

实践三步 get started

第 1 步

选特征 + 标准化:先想清「按什么算相似」,挑出相关特征,把它们缩放到同一尺度。这一步比选算法更影响结果。

第 2 步

按数据形态选算法:成团→K-means;带噪声/怪形状→DBSCAN;要层级→层次;要概率→GMM。先从 K-means 起步。

第 3 步

看结果再迭代:降维到 2D 画出来、算轮廓系数,再结合业务判断是否合理,然后调 K / 调参数重来。