【聚类算法】篇二之KMeans聚类算法及其优化KMeans++,elkan K-Means,Mini Batch K-Means,K中心点算法

篇二之KMeans聚类算法及其优化

  • 一、KMeans算法
  • 二、优化初始k个中心的KMeans++算法
  • 三、优化距离计算量的elkan K-Means算法
  • 四、Mini Batch K-Means
  • 五、K中心点算法
  • 参考

KMeans算法是原型聚类的一种,原型聚类是指基于一组原型进行初始化,然后再利用迭代的方式对原型进行更新求解

一、KMeans算法

K均值算法基于最小化平方误差的原则,所有簇的平方误差和如下:
在这里插入图片描述
μi是簇Ci的样本均值:
在这里插入图片描述
簇的平方误差和刻画了簇内样本的紧密程度,簇内样本距离越近,E值越小,该簇内样本相似度越高。所以便有了基于最小化平方误差和的原则,但是要找到样本集D的所有可能的划分,这是NP难问题,所以KMeans采用贪心策略。通过迭代的方式进行更新求解,具体算法步骤如下:
【聚类算法】篇二之KMeans聚类算法及其优化KMeans++,elkan K-Means,Mini Batch K-Means,K中心点算法_第1张图片
【聚类算法】篇二之KMeans聚类算法及其优化KMeans++,elkan K-Means,Mini Batch K-Means,K中心点算法_第2张图片
关键点:初始k个中心点的选取,以及k的取值,一般是根据先验确定k值,并且k个中心不要离得太近
优点:
  (1)k-means算法是解决聚类问题的一种经典算法,算法简单、快速。
  (2)对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k<   (3)算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。
  (4)主要需要调参的参数仅仅是簇数k
缺点:
  (1)KMeans只有在平均值被定义的情况下才能使用,且对有些分类属性的数据不适合。
  (2)要求用户必须事先给出要生成的簇的数目k,K值的选取不好把握。
  (3)对初值敏感,对于不同的初始值,可能会导致不同的聚类结果。
  (4)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。
  (5)对于"噪声"和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。
  (6)采用迭代方法,得到的结果只是局部最优。

二、优化初始k个中心的KMeans++算法

原始K-means算法最开始随机选取数据集中K个点作为聚类中心,而K-means++按照如下的思想选取K个聚类中心:假设已经选取了n个初始聚类中心(0 【聚类算法】篇二之KMeans聚类算法及其优化KMeans++,elkan K-Means,Mini Batch K-Means,K中心点算法_第3张图片
Step 1:从数据集中随机选取一个样本点作为初始聚类中心C1;

Step 2:首先计算每个样本与当前已有聚类中心之间的最短距离(即最近的聚类中心的距离),用D(x)表示;接着计算每个样本点被选为下一个聚类中心的概率
在这里插入图片描述

Step 3:重复第2步知道选择出K个聚类中心;
Step 4:同于KMeans算法的2~4步
然后在https://blog.csdn.net/the_lastest/article/details/78288955有一个详细的例子。

三、优化距离计算量的elkan K-Means算法

在传统的K-Means算法中,我们在每轮迭代时,要计算所有的样本点到所有的质心的距离,这样会比较的耗时,elkan K-Means算法就是从这块入手加以改进。它的目标是减少不必要的距离的计算。那么哪些距离不需要计算呢?
elkan K-Means利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算
【聚类算法】篇二之KMeans聚类算法及其优化KMeans++,elkan K-Means,Mini Batch K-Means,K中心点算法_第4张图片
【聚类算法】篇二之KMeans聚类算法及其优化KMeans++,elkan K-Means,Mini Batch K-Means,K中心点算法_第5张图片
利用上边的两个规律,elkan K-Means比起传统的K-Means迭代速度有很大的提高。但是如果我们的样本的特征是稀疏的,有缺失值的话,这个方法就不使用了,此时某些距离无法计算,则不能使用该算法。

四、Mini Batch K-Means

Mini batch kmeans是kmeans算法的一个变种,它使用小批量来减少计算时间,同时仍然试图优化相同的目标函数。小批量是输入数据的子集,在每次训练迭代中随机抽样。这些小批量极大地减少了收敛到局部解决方案所需的计算量。与其他减少k-means收敛时间的算法相比,小批量k-means生成的结果通常只比标准算法稍差。
该算法在两个主要步骤之间迭代,类似于普通的k-means。在第一步中,从数据集中随机抽取样本,形成一个小批量。然后将它们指定给最近的质心。在第二步中,将更新质心。与k-均值相比,这是以每个样本为基础进行的。对于小批次中的每个样本,通过获取样本和分配给该质心的所有先前样本的平均值,更新分配的质心。这会降低质心随时间变化的速率。执行这些步骤直到收敛或达到预定的迭代次数。
小批量kmeans的收敛速度比kmeans快,但结果质量下降。在实践中,这种质量差异可能非常小
目标函数为:
在这里插入图片描述
f(C,x)返回x与离的最近的中心的欧式距离,虽然这是个NP难问题,但可以运用梯度下降法收敛到局部最优值
【聚类算法】篇二之KMeans聚类算法及其优化KMeans++,elkan K-Means,Mini Batch K-Means,K中心点算法_第6张图片

五、K中心点算法

K 中心点算法( K-medoids )正好能解决 k-means 算法中的 “噪声”敏感这个问题。
首先,我们得介绍下 k-means 算法为什么会对“噪声”敏感。还记得 K-means 寻找质点的过程吗?对某类簇中所有的样本点维度求平均值,即获得该类簇质点的维度。当聚类的样本点中有“噪声”(离群点)时,在计算类簇质点的过程中会受到噪声异常维度的干扰,造成所得质点和实际质点位置偏差过大,从而使类簇发生“畸变”。
Eg: 类簇 C1 中已经包含点 A(1,1) 、 B(2,2) 、 C(1,2) 、 D(2,1) , 假设 N(100,100) 为异常点,当它纳入类簇 C1 时,计算质点 Centroid((1+2+1+2+100)/5,(1+2+2+1+100)/5)=centroid(21,21), 此时可能造成了类簇 C1 质点的偏移,在下一轮迭代重新划分样本点的时候,将大量不属于类簇 C1 的样本点纳入,因此得到不准确的聚类结果。
为了解决该问题, K 中心点算法( K-medoids )提出了新的质点选取方式,而不是简单像 k-means 算法采用均值计算法。在 K 中心点算法中,每次迭代后的质点都是从聚类的样本点中选取,而选取的标准就是当该样本点成为新的质点后能提高类簇的聚类质量,使得类簇更紧凑。该算法使用绝对误差标准来定义一个类簇的紧凑程度。
在这里插入图片描述
(p 是空间中的样本点,Oj 是类簇Cj 的质点)

如果某样本点成为质点后,绝对误差能小于原质点所造成的绝对误差,那么 K 中心点算法认为该样本点是可以取代原质点的,在一次迭代重计算类簇质点的时候,我们选择绝对误差最小的那个样本点成为新的质点。

Eg :样本点 A –>E1=10

样本点 B –>E2=11

样本点 C –>E3=12

原质点 O–>E4=13 ,那我们选举 A 作为类簇的新质点。

与 K-means 算法一样, K-medoids 也是采用欧几里得距离来衡量某个样本点到底是属于哪个类簇。终止条件是,当所有的类簇的质点都不在发生变化时,即认为聚类结束。
该算法除了改善 K-means 的“噪声”敏感以后,其他缺点和 K-means 一致,并且由于采用新的质点计算规则,也使得算法的时间复杂度上升: O ( k(n-k)2 )

参考

周志华老师的机器学习
刘建平老师的博客https://www.cnblogs.com/pinard/p/6164214.html
sklearn官网以及算法的论文
https://fufeng.iteye.com/blog/1755043

你可能感兴趣的:(数据挖掘/机器学习算法原理)