k-means聚类可以说是聚类算法中最为常见的,它是基于划分方法聚类的,原理是先初始化k个簇类中心,基于计算样本与中心点的距离归纳各簇类下的所属样本,迭代实现样本与其归属的簇类中心的距离为最小的目标。
已知观测集 ( x 1 , x 2 , … , x n ) (x_1,x_2,…,x_n) (x1,x2,…,xn),其中每个观测都是一个 d-维实向量,k-平均聚类要把这 n个观测划分到k个集合中(k≤n),使得组内平方和最小。换句话说,它的目标是找到使得下式满足的聚类 S i S_i Si,
其中 μ i μ_i μi 是 S i S_i Si 中所有点的均值。[5]
K-means 聚类的迭代算法实际上是 EM 算法,EM 算法解决的是在概率模型中含有无法观测的隐含变量情况下的参数估计问题。
在 K-means 中的隐变量是每个类别所属类别。K-means 算法迭代步骤中的 每次确认中心点以后重新进行标记 对应 EM 算法中的 E 步 求当前参数条件下的 Expectation 。而 根据标记重新求中心点 对应 EM 算法中的 M 步 求似然函数最大化时(损失函数最小时)对应的参数 。EM 算法的缺点是容易陷入局部极小值,这也是 K-means 有时会得到局部最优解的原因。[3]
2.2 k-means计算步骤[1]
1、两个集合之间的 x i , x j x_i,x_j xi,xj的 L p L_p Lp距离定义为:
2、当p=1则表示为曼哈顿距离:
3、当p=2则表示为我们常用的欧式距离:
4、当p趋于无穷时,表示为切比雪夫距离,它是各个坐标距离的最大值:
在K-Means算法中一般采用的是欧式距离
4.K-Means优缺点
针对K-Means算法中随机初始化质心的方法进行了优化。
优化的思路是:各个簇类中心应该互相离得越远越好。基于各点到已有中心点的距离分量,依次随机选取到k个元素作为中心点。离已确定的簇中心点的距离越远,越有可能(可能性正比与距离的平方)被选择作为另一个簇的中心点。
过程:[6]
a) 从输入的数据点集合中随机选择一个点作为第一个聚类中心μ1μ1
b) 对于数据集中的每一个点xixi,计算它与已选择的聚类中心中最近聚类中心的距离 D ( x i ) = a r g m i n ∣ ∣ x i − μ r ∣ ∣ 2 2 r = 1 , 2 , . . . k s e l e c t e d D(x_i)=argmin||xi−μr||^2_2 r = 1,2,...k_{selected} D(xi)=argmin∣∣xi−μr∣∣22r=1,2,...kselected
c) 选择一个新的数据点作为新的聚类中心,选择的原则是: D ( x ) D(x) D(x)较大的点,被选取作为聚类中心的概率较大
d) 重复b和c直到选择出k个聚类质心
e) 利用这k个质心来作为初始化质心去运行标准的K-Means算法
如下代码。[3]