K-means, 聚类(clustering) 属于非监督学习 (unsupervised learning),无类别标记。Clustering 中的经典算法,数据挖掘十大经典算法之一,其运算速度比较快,而且简单。但是最终的结果和初始点的选择有关,容易陷入局部最优,且需要知道K的值。
K-means算法
1. 算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一
聚类中的对象相似度较高;而不同聚类中的对象相似度较小。
2.算法思想:
以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心
的值,直至得到最好的聚类结果
3.算法描述:
(1)适当选择c个类的初始中心;
(2)在第k次迭代中,对任意一个样本,求其到c各中心的距离,将该样本归到距离最短的中心所在
的类;
(3)利用均值等方法更新该类的中心值;
(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。
算法流程
输入:k, data[n];
(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];
(2) 对于data[0]….data[n], 分别与c[0]…c[k-1]比较,假定与c[i]差值最少,就标记为i;
(3) 对于所有标记为i点,重新计算c[i]={ 所有标记为i的data[j]之和}/标记为i的个数;
(4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。
举例
假设我们现在总共有四个点,和两个初始中心点(以红星标记)
四个点坐标:A(1,1);B(2,1);C(4,3);D(5,4)
中心点坐标:C1(1,1) ;C2(2,1)
D°表示中心点到各个点的距离。
由于A点到中心点C1最近,而BCD三点到中心点C2比到C1进,所以:
A点归为第一类,BCD归为第二类。
根据归类重新计算中心点。只有A点属于第一类,BCD属于第二类,我们对每一类所有的点求均值
所以:
C1=A=(1,1)
下图是更新过后的
C1不变,C2的位置已经发生了变化。然后我们重复上面的步骤
此时由于A点B点到C1点的距离小于到C2的距离,所以AB点归为一类;C点D点到C2点的距离小于到C1点的距离,所以CD点归为一类
重新计算中心点C1和C2。
更新后的图如下:
再次重复上面的步骤
此时A点和B点到C1的距离还是小于到C2的距离,C点和D点到C2的距离还是小于到C1的距离归类没有任何的变化,所以算法终止,聚类结束。