聚类算法之K-Means,K-Means++,elkan K-Means和MiniBatch K-Means算法流程

核能气质少年 提交于 2020-01-04 00:14:28

聚类问题是机器学习中无监督学习的典型代表,在数据分析、模式识别的很多实际问题中得到了应用。我们知道,分类问题是机器学习中最常见的一类问题,它的目标是确定一个物体所属的类别。分类问题和聚类问题一个最重要的区别在于分类问题有标签,学习过程实际就是程序不断学习各个标签特点的过程,而聚类问题是一种无监督学习问题,我们事先并不知道这些事物一共多少个类,每个事物的所属类别,我们需要让程序基于一定的规则,自动地将事物分为我们需要的类。
我们在进行聚类分析的时候,需要确定无监督学习算法需要决定的三个问题:
1.分成几类?
2.样本之间的距离度量方式?
3.聚类策略?
下面,我们来看一些常用的聚类算法:

一、K-Means

K-Means聚类又叫K均值聚类,是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

K-Means算法过程:

1.输入数据 D={x1,x2,x3,...,xm}D=\begin{Bmatrix}x_1,x_2,x_3,...,x_m\end{Bmatrix},聚类的簇数为K,最大迭代次数为N;
2.从DD中随机选择K个样本作为初始的k个质心:{u1,u2,u3,...,uk}\begin{Bmatrix}u_1,u_2,u_3,...,u_k\end{Bmatrix}
3.对于n=1,2,3,...,Nn=1,2,3,...,N
a.将簇划分CC初始化为:Ct=,t=1,2,...,KC_t=\varnothing,t=1,2,...,K;
b.对于i=1,2,3,...,mi=1,2,3,...,m,计算样本xix_i和k个质心向量的距离:dij=xiujd_{ij}=||x_i-u_j||,将xix_i标记为最小的dijd_{ij}所对应的类别λi\lambda_i,此时,更新Cλi=Cλi{xi}C_{\lambda_i}=C_{\lambda_i}\cup\begin{Bmatrix}x_i\end{Bmatrix}
c.对于j=1,2,3,...,kj=1,2,3,...,k,对CjC_j中所有的样本点重新计算新的质心:uj=1CjxϵCjxu_j=\frac{1}{|C_j|}\sum_{x\epsilon C_j}x
d.如果k个质心都没有发成变化,跳转至步骤4;
4.输出C={C1,C2,C3,...,CK}C=\begin{Bmatrix}C_1,C_2,C_3,...,C_K\end{Bmatrix};算法结束。

K-Means的缺点:

1.k的取值较难确定;
2.最终聚类结果不稳定,依赖于初始化质心,结果随机性较大;
3.每次迭代都需要计算所有样本到质心的距离,计算量大,耗时。

二、K-Means++

K-Means++在K-Means基础上有所改进,最主要的区别在于质心的选择上有所不同。

K-Means++算法过程:

1.从输入数据中随机选择一个点作为第一个聚类中心u1u_1
2.对于数据集中的每一个点xix_i,计算它与已经选择的聚类中心的距离:
D(x)=argmink=1kselectedxiur2D(x)=argmin\sum_{k=1}^{k-selected}||x_i-u_r||^2

3.选择D(x)D(x)较大的数据点作为一个新的聚类中心;
4.重复2和3,直至选出k个质心;
5.利用k个质心来作为初始质心,运行K-Means算法。

由此可见:K-Means++与K-Means的区别就在于质心的选择上,K-Means++在质心选择时,使质心尽量分散,来降低K-Means算法在质心选择上的随机性。

三、elkan K-Means算法

elkan K-Means算法主要对K-Means算法的效率进行了改进:在K-Means中,每轮迭代都需要计算样本点多所有质心的距离,这一操作很耗时,elkan K-Means算法利用了两边之和大于第三边,两边之差小于第三边的三角形性质,来减少距离的计算量。

对于一个样本点xx和两个质心u1u_1u2u_2,预先计算两个质心之间的距离D(u1,u2)D(u_1,u_2),如果发现2D(x,u1)D(u1,u2)2D(x,u_1)\leq D(u_1,u_2),则D(x,u1)D(x,u2)D(x,u_1)\leq D(x,u_2),这样,就没必要计算x,u2x,u_2之间的距离了。
所以,对于一个样本xx和两个质心u1u_1u2u_2D(x,u2)max{0,D(x,u1)D(u1,u2)}D(x,u_2)\geq max\begin{Bmatrix}0,D(x,u_1)-D(u_1,u_2)\end{Bmatrix}

因此,elkan K-Means算法减少了K-Means算法的计算量,提升了算法效率。但elkan K-Means算法不支持稀疏的数据。

四、MiniBatch K-Means算法

MiniBatch K-Means算法也是K-Means算法的一个变种,其目的也是减少计算量,不过优化的依旧是同样的目标函数。

MiniBatch K-Means算法会先随机抽取部分样本(无放回),然后计算这些样本会被分配到的最近的中心点,然后更新中心点,直到算法收敛或到达指定的迭代次数。

MiniBatch K-Means算法会更快的将算法在局部最优点进行收敛,虽然会有一定的精度损失,但一般而言这种损失相较于效率的提升是可接受的。

K-Means总结:

优点:
1.原理简单,容易实现,收敛速度快;
2.聚类效果较优;
3.算法可解释性强;
4.调参较简单,主要调参仅仅是K。

缺点:
1.K值的选取不好把握;
2.对于不是凸数据的数据集,比较难收敛;
3.如果各隐含类别的数据不平衡,或各隐含类别的方差不同,聚类效果不佳;
4.采用迭代方法,得到的结果只是局部最优;
5.对噪音数据和异常点比较敏感。

注意事项: 在使用K-Means算法前,一定要先对数据进行标准化或归一化处理,以避免量纲不同造成距离差异,影响最终聚类结果。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!