【机器学习】K-Means算法

一.引言


有人认为k-means算法是由J.B.MacQueen在1967年提出的,也有人认为k-means聚类算法是由Steinhaus(1955)、Lloyd(1957)、Ball和Hall(1965)、McQueen(1967)分别在各自不同的科学研究领域独立地提出。但大多数人认为MacQueen提出了 k-means算法[2],他总结了Cox[3],Fisher[4],Sebestyen[5]等的研究成果,给出了k-means算法的详细步骤,并用数学方法进行了证明。
但不管怎么样,距离至今,k-means算法已经将近有50年的历史了,很多人仍旧对它进行研究和改进,工业界也常常看见它的身影。

二.原理

k-mean又叫k均值算法,它是一种聚类算法,聚类算法在机器学习中属于无监督的学习算法(Unsupervised Learning),其中k表示聚类后类别的个数,k是人为预先指定的。

看到这,我们也许会想几个问题:

  • (1). k的值是人为的选取,有没有一套科学指导方法? 往往给定一个数据集,我们事先并不知道应该要把该数据集划分成多少类才合适。
  • (2).如何对数据集划分呢?对于其中的任何一条数据记录,我们该把它归为k类中的哪一类?
  • (3).如何知道最后得到的聚类结果是好还是坏呢?也就是说有没有一个标准去测试聚类结果的好坏。

带着这些问题我们先看看聚类算法的核心思想
给定一个数据集,它有n条数据记录,我们要把它分为k类,那么最后这k类中类之间的相似度最小,类内的相似度到达最大。

算法流程:

  1. 从n个数据记录中随机选取k个作为初始的簇中心;
  2. 按照某种距离函数,分别计算剩余的(n-k)数据记录到每个簇中心的距离,将每一个数据记录划分到离某一个簇中心最近的簇中;
  3. 按照均值方法,重新计算每一个簇的簇中心;
  4. 同前一次的簇中心比较,如果没有再发生改变,则停止,否则继续重复第二步和第三步;

3.总结

1.K-means算法优点是可以处理大数据集,K-means算法是相对可伸缩的和高效率的,因为它的计算复杂度为O(nkt),其中n为数据记录的个数,k为聚类个数,t为迭代次数。通常有t≤n,k≤n,因此它的复杂度通常也用O(n)表示。

2.聚类结果依赖于初始值k的设定,但是k值的选定往往要经过很多次实验才能找到最佳聚类个数。

3.对噪声点和孤立点很敏感


参考文献
[1]王千, 王成, 冯振元,等. K-means聚类算法研究综述[J]. 电子设计工程, 2012, 20(7):21-24.
[2]Macqueen J. Some Methods for Classification and Analysis of MultiVariate Observations[C]. Proc. of, Berkeley Symposium on Mathematical Statistics and Probability. 1967:281-297.
[3]D. R. Cox. Note on Grouping[J]. Journal of the American Statistical Association, 1957, 52(280):543-547.
[4]Fisher W D. On Grouping for Maximum Homogeneity[J]. Journal of the American Statistical Association, 2015, 53(284):789-798.

你可能感兴趣的:(机器学习)