- 最常用最简单的方法可视化数据,然后观察出聚类聚成几类比较合适
- 绘制出k-average with cluster distance to centroid的图表,观察随着k值的增加,曲线的下降情况,当曲线不再“急剧”下降时,就是合适的k值
- 计算不同k值下KMeans算法的BIC和AIC值,BIC或AIC值越小,选择该k值
- 使用 Canopy算法先进行粗略的聚类,产生的簇的个数,作为KMeans算法的k值
- 使用x-means方法结合BIC准则去判定簇的个数,也就是k值
- 使用Gap Statistic公式来确定k值
- 使用轮廓系数来确定,选择使系数较大所对应的k值
- 使用交叉验证来确定使目标函数(距中心的距离的平方差)变小的k值
- 利用Affinity propagation的方法估计最优的聚类数目,进一步进行KMeans的算法
- 利用层次聚类,可视化后认为地观察认定可聚为几类,确定k值
- 确定较粗的数目,并找到一个初始聚类,然后用迭代重定位来改进该聚类。
1) 肘部法
肘部法所使用的聚类评价指标为:数据集中所有样本点到其簇中心的距离之和的平方。但是肘部法选择的并不是误差平方和最小的,而是误差平方和突然变小时对应的值。
2) 轮廓系数法
轮廓系数是一种非常常用的聚类效果评价指标。该指标结合了内聚度和分离度两个因素。其具体计算过程如下:
假设已经通过聚类算法将待分类的数据进行了聚类,并最终得到了个簇。对于每个簇中的每个样本点,分别计算其轮廓系数。而所有样本点的轮廓系数的平均值,即为该聚类结果总的轮廓系数。 ,越接近与1,聚类效果越好。
3) 具体案例
先利用sklearn.datasets中的方法生成自己的聚类数据集。具体如下:
对数据x进行归一化(因为KMeans算法中涉及到距离的计算),具体如下:
使用肘部法确定值,其代码如下:
使用轮廓系数确定值,其代码如下: