![]()
聚类算法有个老问题被忽视了半个世纪。K-Means把每个数据点钉死在唯一簇里,像计划经济时代的粮票分配——非红即蓝,没有中间态。但真实数据里,约20%的点天然游走在簇边界,硬分簇逼它们"选边站",信息就这么丢了。
30行代码暴露的暴力美学
Lloyd算法1957年诞生,核心就三步:随机撒种子、就近贴标签、重心再校准。代码极简,效果惊人,至今仍是工业界默认起手式。
但注意Step 2的argmin——这就是暴力的源头。它把距离矩阵压成独热向量,0.51 vs 0.49的差距被放大成1 vs 0。一个点哪怕距两个 centroid 几乎等距,也必须"宣誓效忠"其中一个。
这种非黑即白的分配,在数据有重叠、噪声或模糊边界时,会系统性地低估不确定性。
原文给出的合成数据很典型:三个高斯分布有轻微交叠。K-Means跑出来的边界是一条条直线(Voronoi 图),但真实概率过渡应该是渐变的。强迫边界点"站队",相当于用直尺量曲率。
EM算法:同一套数学,不同的世界观
![]()
K-Means其实是EM算法(期望最大化算法)的硬极限版本。把EM的软分配概率退化成0-1,把协方差矩阵锁死成单位阵,它就坍缩成K-Means。
这个"退化"过程值得细品。EM的E步算的是后验概率——"这个点有73%像A簇,27%像B簇";M步用加权平均更新参数。K-Means把权重砍成1或0,加权平均变成简单平均,计算是省了,表达能力也腰斩。
高斯混合模型(GMM)保留完整版EM。每个簇不再是一个点,而是一个带形状(协方差)的概率云。点落在云重叠区?概率自然拆分,无需强行归边。
从优化视角看,K-Means最小化的是到 centroid 的平方距离之和;GMM最大化的是对数似然。前者是几何直觉,后者是概率推断——后者能回答"这个分配有多靠谱",前者不能。
软分簇何时值回票价
计算成本上,GMM每轮要算矩阵求逆和行列式,K-Means只是向量运算。数据量过百万时,这个差距会被放大。但有三类场景,软分簇的收益覆盖成本:
第一类,簇本身有重叠。客户分群里,"高消费低频"和"低消费高频"之间真有清晰边界?硬切一刀会制造伪类别。第二类,下游任务需要置信度。推荐系统里,"60%像A、40%像B"的用户,策略可以是融合两簇特征,而非押注单一标签。第三类,数据含噪声或异常点。K-Means的硬分配会把离群点强行吞进某个簇,GMM的低概率权重天然降低其影响。
![]()
原文作者埋了个细节:K-Means的 distortion(畸变值)单调下降,但GMM的对数似然可能局部震荡。这不是bug,是软分配在探索概率空间的正常表现。硬分簇的"稳定"有时是信息损失换来的幻觉。
一个被复现了无数次的认知陷阱
很多工程师把K-Means当基线,跑完看silhouette score(轮廓系数)不错就交差。但轮廓系数本身假设硬标签,用K-Means的尺子量GMM,相当于让鱼爬树。
更隐蔽的问题是初始化。K-Means对初始 centroid 敏感,k-means++缓解但未根除。GMM同样敏感,且多了协方差矩阵初值的问题。原文代码用固定seed,生产环境得跑多次取最优,或改用贝叶斯GMM做自动模型选择。
还有个实现细节:GMM的协方差矩阵可能奇异(行列式为零),导致概率密度爆炸。工程上要加正则化项或约束协方差结构(球形、对角、全矩阵三选一),这是K-Means无需操心的脏活。
50年来,K-Means的统治地位与其说来自优越性,不如说来自"足够好且足够简单"。但数据复杂度在涨,业务对不确定性的容忍度在降,软分簇的工具链(PyTorch、JAX里的可微分GMM)也在成熟。那个非黑即白的默认值,或许该松动了。
你上次跑聚类时,有没有检查过边界点的概率分布?还是看着漂亮的 Voronoi 图,就默认分类已经"完成"了?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.