K-means()是一种简单的无监督学习算法,用以解决聚类问题。它的过程简单的通过使用一个簇中心参数实现数据分类(假定共有K的簇)。K-means方法定义K个质心,对于每一个簇质心应该通过巧妙的方法计算位置,因为不同的位置导致不同的结果。因此最好的选择方法是使得彼此尽可能远离对方。下一步把数据集中距离每一质心最近的数据加入到相应的簇中。这样K-means的第一步就完成了。下一步根据前一步新加入到各个簇的数据重新计算每个簇的质心。这样我们就有了K个新的质心,重复第二步和第三部不断的改变k的质心的位置,直到质心不再有变化。换句话说就是质心不在发生移动。
最后,这个算法的目标是得到最小化目标函数。这个目标函数如下:
该算法步骤如下:
1. 选取k个数据作为k个簇的初始质心。
2. 找到每个距离质心最近的数据并加入其中。
3. 根据新加入簇的数据重新计算各个簇的质心。
4. 重复第2步和第3步知道所有质心不再发生移动。
上述步骤已被证明总是可以终止,但K-means算法实际上并不一定能找到最小化目标函数的最优分簇。同时该算法对初始随机选取的K个质心异常敏感,可以通过多次运行算法来减少这种问题。
K-means是一种简单的算法,并且可以适用于多种领域。我们也正要看到,它的一个好的改进算法便是使用模糊特征向量计算。
参考文献
- J. B. MacQueen (1967): "Some Methods for classification and Analysis of Multivariate Observations, Proceedings of 5-th Berkeley Symposium on Mathematical Statistics and Probability", Berkeley, University of California Press, 1:281-297
- Andrew Moore: “K-means and Hierarchical Clustering - Tutorial Slides”
http://www-2.cs.cmu.edu/~awm/tutorials/kmeans.html - Brian T. Luke: “K-Means Clustering”
http://fconyx.ncifcrf.gov/~lukeb/kmeans.html - Tariq Rashid: “Clustering”
http://www.cs.bris.ac.uk/home/tr1690/documentation/fuzzy_clustering_initial_report/node11.html - Hans-Joachim Mucha and Hizir Sofyan: “Nonhierarchical Clustering”
http://www.quantlet.com/mdstat/scripts/xag/html/xaghtmlframe149.htm - From: