直接引用一下普林斯顿课程COS-424中“Interacting With Data”这篇文章,里面用一个例子解释了如何选择聚类算法中的K值(课程资料见文末参考材料)。
在聚类分析中如何选择k值,对于很多工作都是一个棘手的问题,目前大家还没有达成一致的解决方案,有时只是随意来声明一个K值,有时问题会帮我们决定k的取值。集群数量具有自然价值,但总的来说,这个概念定义不明确。
假设有一个K=4的聚类任务,结果显示如下:
现在我们讨论一下,当簇数增加时会发生什么?可能有以下情况:第五聚类簇所含数据点很小或者为空,在这种情况下,目标函数几乎保持不变。
第五聚类簇的聚类中心在数据图的中心,此时,第五个聚类簇会从所有其他聚类簇中提取一部分点。在这种情况下,目标函数会减少,因为如果没有其他方法,这些点将不会转移到新的均值,而我们仍将处于第一种情况。但是,有很多点离聚类均值还很远。
某个聚类簇会一分为二。在这种情况下,由于所有点都接近均值,因此我们降低了目标函数。同时,因为所有点都将更接近均值,所以与前两个方法相比,这是一个更好的选择。在这种情况下,与第二种情况相比,会影响到更多的数据点,且会降低平均的聚类距离之和。
K值的增加和分类图的变化如下:
k=5:
k=6
k=7
k=8
从上面一系列图中可以看出,聚类簇数K从4增加到5、6、7和8的效果。我们发现,在所有这些情况中,一个集群都被细分为两个。
当我们针对聚类数绘制目标函数时,我们会注意到k = 3和k = 5之间的两段下降,从中可以看出4是正确的群集数。这是因为,当k从3增加到4时,目标函数的减小远大于k从4增加到5时目标函数的减小,且k=4时目标函数处于一个相对较小的位置。
参考资料