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

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

一、K-Means

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

K-Means算法过程:

1.输入数据 D = { x 1 , x 2 , x 3 , . . . , x m } D=\begin{Bmatrix}x_1,x_2,x_3,...,x_m\end{Bmatrix} ,聚类的簇数为K,最大迭代次数为N;
2.从 D D 中随机选择K个样本作为初始的k个质心: { u 1 , u 2 , u 3 , . . . , u k } \begin{Bmatrix}u_1,u_2,u_3,...,u_k\end{Bmatrix}
3.对于 n = 1 , 2 , 3 , . . . , N n=1,2,3,...,N
a.将簇划分 C C 初始化为: C t = , t = 1 , 2 , . . . , K C_t=\varnothing,t=1,2,...,K ;
b.对于 i = 1 , 2 , 3 , . . . , m i=1,2,3,...,m ,计算样本 x i x_i 和k个质心向量的距离: d i j = x i u j d_{ij}=||x_i-u_j|| ,将 x i x_i 标记为最小的 d i j d_{ij} 所对应的类别 λ i \lambda_i ,此时,更新 C λ i = C λ i { x i } C_{\lambda_i}=C_{\lambda_i}\cup\begin{Bmatrix}x_i\end{Bmatrix}
c.对于 j = 1 , 2 , 3 , . . . , k j=1,2,3,...,k ,对 C j C_j 中所有的样本点重新计算新的质心: u j = 1 C j x ϵ C j x u_j=\frac{1}{|C_j|}\sum_{x\epsilon C_j}x
d.如果k个质心都没有发成变化,跳转至步骤4;
4.输出 C = { C 1 , C 2 , C 3 , . . . , C K } 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.从输入数据中随机选择一个点作为第一个聚类中心 u 1 u_1
2.对于数据集中的每一个点 x i x_i ,计算它与已经选择的聚类中心的距离:
D ( x ) = a r g m i n k = 1 k s e l e c t e d x i u r 2 D(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算法利用了两边之和大于第三边,两边之差小于第三边的三角形性质,来减少距离的计算量。

对于一个样本点 x x 和两个质心 u 1 u_1 u 2 u_2 ,预先计算两个质心之间的距离 D ( u 1 , u 2 ) D(u_1,u_2) ,如果发现 2 D ( x , u 1 ) D ( u 1 , u 2 ) 2D(x,u_1)\leq D(u_1,u_2) ,则 D ( x , u 1 ) D ( x , u 2 ) D(x,u_1)\leq D(x,u_2) ,这样,就没必要计算 x , u 2 x,u_2 之间的距离了。
所以,对于一个样本 x x 和两个质心 u 1 u_1 u 2 u_2 D ( x , u 2 ) m a x { 0 , D ( x , u 1 ) D ( u 1 , u 2 ) } 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算法前,一定要先对数据进行标准化或归一化处理,以避免量纲不同造成距离差异,影响最终聚类结果。

发布了20 篇原创文章 · 获赞 10 · 访问量 1449

猜你喜欢

转载自blog.csdn.net/Jerry_Chang31/article/details/103824385