社区课程活动导航作者申请报告
CxHub客户体验社区-用户研究、体验爱好者学习交流社区,专注客户体验(CX)研究。
社交媒体
官方合作伙伴
联系我们
联系邮箱:longguofu1024@gmail.com
公司地址:深圳市宝安区华联城市全景 G 座1117
网站首页友情链接关于我们商务合作隐私政策
© 2025 CxHub | 粤ICP备18009813号-6
社区课程活动导航作者申请报告

聚类,应该聚成多少类?

确定聚类数(即K值)是聚类分析中的一个关键问题。科学地确定合适的聚类数可以提高聚类结果的准确性和解释性。以下介绍一些常用的方法和技术,用于确定最佳的聚类数。

① 肘部法则

把握一个核心:类别内差异尽量小,类别间差异尽量大。

核心概念:误差平方和SSE。

该值可用于测量各点与中心点的距离情况(类别内的差异大小),理论上是希望越小越好。该指标可用于辅助判断聚类类别个数,如果发现比如从n个聚类到n+1个类别时SSE值减少幅度明显很大,此时选择n+1个聚类类别较好。

类似于SPSS中的碎石图。

SSE:每个点到其所属簇中心的距离平方和。

随着K值的增加,SSE通常会减小,因为样本会被划分得越来越精细。

肘方法的核心在于寻找SSE下降速度减缓的转折点,即“肘点”,这个点通常被认为是数据集中真实的聚类数量。

它的本质与主成分分析、因子分析中的"碎石图"并无差别,但这种方法主观性较强。

(图为示例)

应用范围:最常用于K-means聚类算法。

实现工具:

  • Python(sklearn库):暂未尝试。
  • SPSS:步骤较多,没考虑使用。
  • R(factoextra包):代码如下。
(代码方案及结果可视化)

② 经验逻辑

从实际应用场景来看,分类数量不宜太多,以3-6类为主流的分类标准,主要考虑到在实际商业应用中分类过多并不能更有效指导商业成功,以有效作为第一性原则。

③ 轮廓系数

轮廓系数结合了内聚度和分离度两种因素,即同时考察了组内相似性和组间差异性。

对于每个样本,计算它与同簇其他样本的平均距离(a)和它与最近簇内所有样本的平均距离(b)。

轮廓系数的值介于[-1, 1]之间,接近1表示样本很好地匹配到了簇,接近-1则表示样本更匹配其他簇。

整体轮廓系数为所有样本轮廓系数的平均值。

对于不同的K值,计算对应的平均轮廓系数,选择使得轮廓系数最大的K值作为最佳聚类数。

应用范围:K-means聚类和系统聚类等均适用。

实现工具:

  • Python(scikit-learn):暂未尝试。
  • MATLAB(silhouette函数):暂未尝试。
  • R(cluster-silhouette):代码如下。
(代码方案及结果可视化,采用Kmeans时聚类数为2的时候系数最高)
(代码方案及结果可视化,采用K-Medoids算法时聚类数为3时系数最高)

④ 卡林斯基-哈拉巴斯指数 (Calinski-Harabasz Index)

一种评估聚类效果的指标,它是簇间离散度与簇内离散度的比值。该指数的值越大,表示簇间的差异性越大而簇内的差异性越小,聚类效果越好。通过计算不同K值的CH指数并选择最大值对应的K值作为最佳聚类数。

应用范围:通常用于评估基于方差的聚类方法的聚类质量,最常见的是K均值聚类,层次聚类&DBSCAN也会用到。

实现工具:

Python(scikit-learn):暂未尝试。

MATLAB:暂未尝试。

R(自定义函数):内置函数似乎无法实现,需要自定义函数calinski_harabasz_index,代码有点复杂,如下。

(代码方案及结果可视化,聚类数为2的时候指数最高)

⑤ 戴维斯-博尔丁指数 (Davies-Bouldin Index)

是一种评估聚类效果的指标,它基于聚类内距离和聚类间距离的比率。DB指数的值越小,表示聚类效果越好。通过计算不同K值的DB指数并选择最小值对应的K值作为最佳聚类数。

戴维斯-博尔丁指数计算简单,易于理解,因此可以广泛应用于各种聚类方法的评估中。

应用范围:K-Means聚类、系统聚类、DBSCAN聚类等

实现工具:

  • Python(scikit-learn):暂未尝试。
  • MATLAB(Statistics and Machine Learning Toolbox):暂未尝试。
  • R(自定义函数):网上说是cluster包有包含计算DBI的函数,但尝试失败,需要自定义函数davies_bouldin_index,代码有点复杂,如下。
(代码方案及结果可视化,聚类数为2的时候指数最高)

⑥ Gap Statistic (Gap值)

通过比较实际数据的聚类结果与随机生成的数据的聚类结果来估计数据集中的聚类数目。这种方法不依赖于特定的聚类算法,可以与多种聚类方法结合使用。

但要注意的是,Gap Statistic本身并不能确定最佳的聚类数目,而是通过比较不同聚类数目下的Gap Statistic值来帮助选择最佳的聚类数目(最大值通常对应于最佳的聚类数目,因为它表示在这个数目下,原始数据的聚类结构与随机数据的聚类结构差异最大)。

因此,在使用Gap Statistic时,还需要结合其他方法来确定最佳的聚类数目。

原理:

对于真实数据集,聚类结果会形成紧密的簇。

而对于随机数据集,由于数据是随机生成的,因此不会形成明显的簇。

因此,如果聚类结果较好,真实数据集的聚类间隔应该比随机数据集的聚类间隔要大。

应用范围:K-means聚类(最初用途)、密度聚类、系统聚类等

实现工具:

  • Python(自定义函数):暂未尝试。
  • MATLAB(自定义函数):暂未尝试。
  • R(cluster):
(代码方案及结果可视化1)
(代码方案及结果可视化2)

⑦ 交叉验证 (Cross-Validation)

虽不常见,但交叉验证也可以用来确定聚类数。

通过将数据集分成几个部分,并在不同部分上重复聚类过程,然后评估聚类结果的一致性,可以帮助选择一个稳健的K值。

⑧ 信息准则方法

在二阶聚类的文章中,已对此方法有所介绍,此处不做详细展开。

用于模型选择和评估,帮助研究者在多个潜在模型中选择最佳模型(通过计算不同聚类数目下的特定值来选择最佳聚类数目),它试图平衡模型拟合优度和模型复杂度之间的矛盾。

传统聚类方法如K-means、层次聚类等,往往采用轮廓系数、Calinski-Harabasz指数、Davies-Bouldin指数等聚类评价指标来确定最优聚类数,而不是直接使用信息准则。而对于那些可以形式化为概率模型的聚类方法(如高斯混合模型),信息准则就有明确价值。

信息准则方法主要有赤池信息准则(AIC)和贝叶斯信息准则(BIC):

关心泛化能力,更倾向于选择惩罚力度更大的BIC;而如果更关注解释现有数据,AIC是更好的选择。

应用范围:K-means聚类、密度聚类、系统聚类、高斯混合模型等。

必须样本量足够大,因为它考虑了样本大小。

实现工具:

  • Python(scikit-learn):暂未尝试。
  • MATLAB(自定义函数):暂未尝试。
  • SAS:暂未尝试。
  • SPSS:可参考二阶聚类的相关文章,此处不展开。
  • Stata:暂未尝试。
  • R:赤池信息准则(AIC)

样本量不够大,数据会不稳定

(代码方案及结果可视化)

贝叶斯信息准则(BIC)

样本量不够大,数据会不稳定

(代码方案及结果可视化)

⑨ 领域建议

领域知识和专家意见也是确定聚类数时重要的输入手段,在计算陷入“死胡同”的时候,领域建议往往能打开新思路。

聚类分析
聚类数
实用方法
版权声明:本文为 CxHub 作者【 谭炜锋 】的原创文章,转载请联系作者。
该文观点仅代表作者本人,CxHub客户体验社区平台仅提供信息存储空间服务。
复制文本链接
谭炜锋
49文章
23读者
数据分析驱动用户研究
全部评论
热门
最新
请先登录后评价
关注作者,不错过精彩内容