一.引言
有人认为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条数据记录