聚类算法中聚类数量的确定方法
聚类算法是对实体进行分组归类的有效方法,也是有利于降低人力工作量的有效手段,例如先用AI聚类方法对实体数据进行聚类分组,再由人工介入指认,能有效降低工作成本,但是聚类数量的确定是个很客观的问题,到底聚多少类才算合适呢?
本文就此问题介绍几种方法:
1.手肘法
本质上是计算误差平方和(SSE),具体如下:
\(SSE = \sum_{i=1}^{K}\sum_{j\in C_{i}}\left | j-m_{i} \right |^{2}\)
注意\(K\)为聚类数,\(m_{i}\)为第\(i\)个聚类中心,\(j\)是第\(i\)类类簇的第\(i\)个数据点。公式可以理解为在聚类数为\(K\)下每个类簇内的点到相应类簇中心点的误差平方和。
可以假想一下,当所有点都聚在一起的时候,\(SSE\)是最大的,而当每个数据点为一类时,\(SSE=0\),也就是说,当聚类数不断增加时,\(SSE\)会逐渐趋近于0,在随着聚类数增加的过程中,\(SSE\)有下降速度最大的一个点,而这个点就是聚类数最佳的点。实际应用过程中,会把\(SSE-K值\)曲线画出来,在\(SSE\)下降速度最大的点作为\(K\)值最优点。
2. Calinski Harabasz系数
CH系数公式如下:
\(CH(K) = \frac{trB(K)/(k-1)))}{trW(K)/n-k)}\),\(K\)表示当前聚类数,\(trB(K)\)表示类簇间的离差矩阵的迹,\(trW(K)\)表示类内离差矩阵的迹,\(n\)表示聚类数量
3. Silhouette Coefficient(轮廓系数)
具体公式如下:
\(S(i) = \frac{b(i)-a(i)}{max(a(i),b(i))}\),其中\(a(i)\)是点\(i\)与所在类簇内其他所有点的距离平均值,\(b(i)\)为点\(i\)到非包含它的类簇内所有点距离平均值的最小值,可以知道\(a(i)\)越小说明聚类内聚度越好,\(b(i)\)越大说明类间分离程度越好。