KMEANS算法原理:
1、从D中随机取k个元素,作为k个簇的各自的中心。
2、分别计算剩下的元素到k个簇中心的欧氏距离,将这些元素分别划归到相异度最低的簇。
3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
4、将D中全部元素按照新的中心重新聚类。
5、重复第3步,直到聚类结果不再变化。
6、将结果输出。
KMeans算法本身思想比较简单,但是合理的确定K值和K个初始类簇中心点对于聚类效果的好坏有很大的影响。
1、确定K值
《大数据》中提到:给定一个合适的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升。
类簇的直径是指类簇内任意两点之间的最大距离。
类簇的半径是指类簇内所有点到类簇中心距离的最大值。
废话少说,上图。下图是当K的取值从2到9时,聚类效果和类簇指标的效果图:
左图是K取值从2到7时的聚类效果,右图是K取值从2到9时的类簇指标的变化曲线,此处我选择类簇指标是K个类簇的平均质心距离的加权平均值。从上图中可以明显看到,当K取值5时,类簇指标的下降趋势最快,所以K的正确取值应该是5.为以下是具体数据:
1 2 个聚类 2 所有类簇的半径的加权平均值 8.51916676443 3 所有类簇的平均质心距离的加权平均值 4.82716260322 4 3 个聚类 5 所有类簇的半径的加权平均值 7.58444829472 6 所有类簇的平均质心距离的加权平均值 3.37661824845 7 4 个聚类 8 所有类簇的半径的加权平均值 5.65489660064 9 所有类簇的平均质心距离的加权平均值 2.22135360453 10 5 个聚类 11 所有类簇的半径的加权平均值 3.67478798553 12 所有类簇的平均质心距离的加权平均值 1.25657641195 13 6 个聚类 14 所有类簇的半径的加权平均值 3.44686996398 15 所有类簇的平均质心距离的加权平均值 1.20944264145 16 7 个聚类 17 所有类簇的半径的加权平均值 3.3036641135 18 所有类簇的平均质心距离的加权平均值 1.16653919186 19 8 个聚类 20 所有类簇的半径的加权平均值 3.30268530308 21 所有类簇的平均质心距离的加权平均值 1.11361639906 22 9 个聚类 23 所有类簇的半径的加权平均值 3.17924400582 24 所有类簇的平均质心距离的加权平均值 1.07431888569
Keans算法的优缺点: