K均值算法是一类非监督学习类,其可以通过观察样本的离散性来对样本进行分类。
例如,在对如下图所示的样本中进行聚类,则执行如下步骤
1:随机选取3个点作为聚类中心。
2:簇分配:遍历所有样本然后依据每个点到最近距离进行分类。(在图 中用不同颜色标出)
3:移动聚类中心到各个分类样本的平均中心。
然后再次根据新的聚类中心划分分类簇,原理同步骤2,再执行步骤3 不断循环,直到聚类中心保持不变。
最后结果:
如果用μ1 μ2---μ k来表示聚类中心,用c 1 c 2---c m 用来存储第i个实例数据最近的聚类中心索引,k-均值算法如下:
repeat{
for i = 1 to m
c i := index(from1 to K)索引中最接近x(i)的聚类.
for k = 1 to K
μ k := 所有该聚类点的几何平均值
}
算法分为两个部分,第一个for循环是赋值的步骤,即就是对于每一个样例i,计算其应该属于的类。
第二个for循环是聚类中心的移动,即对于每一个类k,重新计算该类的质心。
K均值算法也可以很便利的用在讲数据分组,即使没有很明显区分的情况下。
优化目标:
k均值最小化问题,是要最小化所有的数据点与其说关联的聚类中心点之和,因此K均值函数又称畸变函数。
如图所示的畸变函数中,μc(i)代表x(i)最近的聚类中心点。我们的优化目标便是找到是的代价函数最小的c1 c2 ...c m和μ1 μ2 ...μk
回顾刚才所给出的K均值迭代算法,我们知道,第一循环用于减小c i 引起的代价,二第二个循环的作用是用于减小μ i引起的代价。迭代过程中一定是每一次迭代都在减小代价函数,不然便会出现错误。