K-means聚类轮廓系数过低、效果不佳问题排查
现有操作流程的核心错误
K-means聚类得分异常低、和层次聚类结果差距极大,核心是流程中存在4个明确问题:
- 轮廓系数计算传入错误数据集:K-means和层次聚类均在归一化处理后的
Xnorm上完成训练,但计算轮廓系数时传入的是未缩放的原始data。轮廓系数基于样本间欧氏距离计算,未归一化数据中量纲更大的特征会完全主导距离结果,和模型训练时的特征空间完全错位,计算出的得分没有参考价值。 - 分类变量编码逻辑存在缺陷:
- 教育水平的整数映射打乱了真实层级顺序:教育程度从低到高的真实排序为
Partial High School(未完成高中)< High School(高中毕业)< Partial College(未完成大学)< Bachelors(本科)< Graduate Degree(研究生),自定义的映射数值和这个递进逻辑不匹配,人为扭曲了特征间的距离关系。 - 如果数据集包含无序分类变量(如性别、职业、婚姻状态等无大小顺序的特征),直接做整数映射会强行给类别加上等距的线性关系,比如将“男”映射为1、“女”映射为2,模型会默认两类间的距离为1,和其他数值特征的距离混同计算,彻底破坏特征空间的合理性。
- 教育水平的整数映射打乱了真实层级顺序:教育程度从低到高的真实排序为
- 不同算法的对比参数不对等:运行K-means时设置簇数为10,运行层次聚类时设置簇数为3。轮廓系数对簇数量敏感度极高,不同簇数下的得分不具备可比性,无法直接据此判断算法效果的优劣。
- 层次聚类的结果参考性不足:标准层次聚类的时间、空间复杂度在O(n²)到O(n³)区间,6万行规模的全量数据跑层次聚类会占用极高内存,常规计算资源很难正常运行。如果是在抽样得到的小样本上跑出0.54的轮廓系数,和全量数据上训练的K-means结果不存在对比基础。
K-means效果优化方案
- 修正基础代码错误
- 聚类评估必须传入和模型训练完全一致的数据集,计算轮廓系数时用
Xnorm替换原始data,保证距离计算逻辑和训练阶段统一。 - 对比不同聚类算法效果时,必须对齐簇数量、训练数据集、评估指标三个核心变量,否则对比结论无效。
- 聚类评估必须传入和模型训练完全一致的数据集,计算轮廓系数时用
- 调整特征工程逻辑
- 有序分类变量严格按照真实的层级顺序做整数映射,保证数值大小和实际等级递进关系一致。
- 无序分类变量不要使用整数映射,改用独热编码转换;如果数据集中混合类型特征占比较高,可以直接用适配数值+分类混合数据的K-prototypes算法替代K-means,避免编码带来的距离扭曲。
- 提前做特征相关性筛查,剔除相关性高于0.9的冗余特征,避免重复特征主导距离计算;如果噪声特征较多,可以先用PCA降维保留90%左右的方差后再开展聚类,降低噪声对结果的干扰。
- 针对性调优K-means
- 不要主观设置簇数,通过肘部法则、轮廓系数遍历k值在2~15区间的训练结果,选择轮廓系数最高、簇内误差平方和下降趋于平缓的k值作为最优簇数,可以先测试k=3(和层次聚类设置的簇数对齐)的效果。
- 如果完成上述调整后K-means效果仍然不佳,说明数据分布不符合K-means的前提假设(K-means更适配凸形、大小相近、方差相近的簇),可以换用HDBSCAN、高斯混合模型(GMM)这类对簇形状适配性更强的聚类算法。
内容的提问来源于stack exchange,提问作者Fábio Pires
相关产品推荐
相关产品推荐

