K-Means原理总结

2024-05-14

1. K-Means原理总结

    K-means是聚类中的一个经典方法。其中的原理和思想实在是巧妙到爆炸💥。接下来让我来给大家展示来自1967年的算法的智慧。
  
 问题引出:如下图所示,我们想要自动的聚类,肉眼一看是5类。那么我们随机生成5个点,它们最终将会成为聚类后每个类的中心点。由于是随机初始化的5个点,所以它们的位置刚开始大概率不在每个类的中心点上,不过没关系,我们可以慢慢调整。
                                          
 过程描述:如上图所示生成的5个点,它们最终会成为每个类的中心点,此时此刻,每个点有着自己的领域范围。比如最上面的那个点1,它想要成为一个类的中心点,这个类此时此刻都包含哪些点呢,答案当然是到它的距离比到其他中心点距离更近的所有样本点。那么接下来,哪些点符合条件呢?由于每个中心点它都想要控制尽可能多的点,并且得合理。那最上面那个中心点1想要控制位于它自己下面的一些样本点,会有哪些中心点在跟它竞争呢? 答案是中间左右两个点2和3,注意最下面两个中心点4和5参与不到竞争了。所以我们做出两条垂直平分线a,b。a是连线点1,2的垂直平分线,b是连线点1,3的垂直平分线。垂直平分线有什么性质啊? 位于线上的点到两端的距离相等,位于线一侧的点到该侧端点距离更小。所以!位于垂直平分线a,b上面的所有样本点暂时归中心点的领域,注意此时点1并未是该领域样本点的中心,我们应该更新点1的位置,把它挪到领域的中心。因为三角形三条边的垂直平分线会交于一点(先画出两条交于一点,再从该点向另一个边做垂线,证明该垂线与边的交点为中点即可)所以5个中心点互相竞争划分领域会呈现出如上并不杂乱的界限。我们更新5个中心点的位置,再次重新竞争领域,再更新位置。。。直到中心点的位置不动了,聚类完毕。
  
 
  
                                          
         原理中一直贯穿着中心的概念,这就是means的含义。接下来我们来分析一下K-means的优缺点。
  
             1.对分布类似球型的数据效果很好。为什么?试想长条带状的末端有一小簇。
  
 .............................................           。
  
 .............................................           。
  
 如果刚开始随机的中心点一左一右刚刚好,开始竞争,显然...这些右侧的..离。。。的中心点更近,按规则应该归它领域,然后再更新。这样就不符合人的直觉了。
  
             2.收敛的很快,中心点更新个几次后就不咋动了。
  
             3.相对高效并且易估计复杂度O(k·t·n),t是迭代次数一般几次就可以完成,k是中心点个数,簇的个数,不会很大。n是数据点的个数,可能会很大。
  
         1.K值不好估计,不能预先去判断。
  
         2.可能会因为初始点随机的不好,会收敛到一个奇怪的结果。如下图。

K-Means原理总结

2. K-means的算法优点

K-Means聚类算法的优点主要集中在:1.算法快速、简单;2.对大数据集有较高的效率并且是可伸缩性的;3.时间复杂度近于线性,而且适合挖掘大规模数据集。K-Means聚类算法的时间复杂度是O(nkt) ,其中n代表数据集中对象的数量,t代表着算法迭代的次数,k代表着簇的数目。

3. K-means的算法缺点

 ① 在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。这也是 K-means 算法的一个不足。有的算法是通过类的自动合并和分裂,得到较为合理的类型数目 K,例如 ISODATA 算法。关于 K-means 算法中聚类数目K 值的确定在文献中,是根据方差分析理论,应用混合 F统计量来确定最佳分类数,并应用了模糊划分熵来验证最佳分类数的正确性。在文献中,使用了一种结合全协方差矩阵的 RPCL 算法,并逐步删除那些只包含少量训练数据的类。而文献中使用的是一种称为次胜者受罚的竞争学习规则,来自动决定类的适当数目。它的思想是:对每个输入而言,不仅竞争获胜单元的权值被修正以适应输入值,而且对次胜单元采用惩罚的方法使之远离输入值。② 在 K-means 算法中,首先需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果,这也成为 K-means算法的一个主要问题。对于该问题的解决,许多算法采用遗传算法(GA),例如文献 中采用遗传算法(GA)进行初始化,以内部聚类准则作为评价指标。③ 从 K-means 算法框架可以看出,该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的。所以需要对算法的时间复杂度进行分析、改进,提高算法应用范围。在文献中从该算法的时间复杂度进行分析考虑,通过一定的相似性准则来去掉聚类中心的侯选集。而在文献中,使用的 K-means 算法是对样本数据进行聚类,无论是初始点的选择还是一次迭代完成时对数据的调整,都是建立在随机选取的样本数据的基础之上,这样可以提高算法的收敛速度。

K-means的算法缺点

4. K-means的介绍

K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。

5. K-means的基本信息

 K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。k个初始类聚类中心点的选取对聚类结果具有较大的影响,因为在该算法第一步中是随机的选取任意k个对象作为初始聚类的中心,初始地代表一个簇。该算法在每次迭代中对数据集中剩余的每个对象,根据其与各个簇中心的距离将每个对象重新赋给最近的簇。当考察完所有数据对象后,一次迭代运算完成,新的聚类中心被计算出来。如果在一次迭代前后,J的值没有发生变化,说明算法已经收敛。算法过程如下:1)从N个文档随机选取K个文档作为质心2)对剩余的每个文档测量其到每个质心的距离,并把它归到最近的质心的类3)重新计算已经得到的各个类的质心4)迭代2~3步直至新的质心与原质心相等或小于指定阈值,算法结束具体如下:输入:k, data[n];(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];(2) 对于data[0]….data[n],分别与c[0]…c[k-1]比较,假定与c[i]差值最少,就标记为i;(3) 对于所有标记为i点,重新计算c[i]={ 所有标记为i的data[j]之和}/标记为i的个数;(4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。 K-MEANS算法的工作原理及流程K-MEANS算法输入:聚类个数k,以及包含 n个数据对象的数据库。输出:满足方差最小标准的k个聚类。 (1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心;(2) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;(3) 重新计算每个(有变化)聚类的均值(中心对象)(4) 循环(2)到(3)直到每个聚类不再发生变化为止k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。工作过程k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然 后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数。k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。

K-means的基本信息

6. K-means的存在问题

 存在的问题K-means 算法的特点——采用两阶段反复循环过程算法,结束的条件是不再有数据元素被重新分配: 优点:本算法确定的K 个划分到达平方误差最小。当聚类是密集的,且类与类之间区别明显时,效果较好。对于处理大数据集,这个算法是相对可伸缩和高效的,计算的复杂度为O(NKt),其中N是数据对象的数目,t是迭代的次数。一般来说,K<<N,t<<N 。

7. K-Means 聚类原理

K-Means 是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。
  
 假设有一些点分散在直线上,现在需要对这些点进行聚类分析。
                                          
 第一步,想一下我们希望最终将这些点聚为多少类?
  
 假设我们希望聚为3类
  
 第二步,在这些点中随机选择3个点,作为初始簇(initial cluster)
                                          
 第三步,计算第一个点f分别到这3个initial cluster的距离
                                          
 第四步,将第一个点归属为距离最近的那个cluster
                                          
 重复第三/四步
                                          
 一一判断所有点的归属
                                          
 第五步,计算每一个cluster的均值
                                          
 然后像之前一样,通过计算每个点到这些均值的距离,重新判断每个点归属于哪个cluster
                                          
 判断完每个点的归属之后,重新计算均值……判断归属……计算均值……判断归属……直到聚出来的cluster不再变化
                                          
 很明显,上面的聚类效果很差,还不如我们肉眼聚类出来的效果。是否有办法判断不同聚类结果的好坏呢?
                                          
 第一步,计算每一个cluster的总变差(total variation)
                                          
 第二步,重新选择3个initial cluster,并且多次迭代判断cluster,计算total variation
                                          
 第三步,多次重复上一步的内容,选择total variation最小的聚类结果
                                          
 在本文的案例中,我们通过肉眼可以判断出K选择3比较好。但是如果我们自己无法判断时,如何处理?
  
 一种方法是直接尝试不同的K值进行聚类
  
 K=1是最差的一种结果,total variation此时最大
                                          
 K=2的效果会稍微好些
                                          
 随着K值增大,total variation也逐渐减小;当K=N(样本数)时,total variation降至0。
  
 绘制total variation随K值变化的elbow plot
                                          
 可以看出,K>3时,variation的降低速率明显降低。所以K=3是较好的选择。
  
 二维平面上的点,可以通过欧式距离来判断聚类
                                          
 然后同之前一般,计算平面上同一cluster的中心,重新判断点的归属,寻找中心……判断归属……
                                          
 对于热图相关数据,也可以通过欧式距离来判断样本的聚类
                                          
  https://blog.csdn.net/huangfei711/article/details/78480078 
  
  https://www.biaodianfu.com/k-means-choose-k.html 
  
  https://www.youtube.com/watch?v=4b5d3muPQmA&feature=youtu.be

K-Means 聚类原理

8. K-MEANS算法的处理流程

 (1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心;(2) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;(3) 重新计算每个(有变化)聚类的均值(中心对象);(4) 计算标准测度函数,当满足一定条件,如函数收敛时,则算法终止;如果条件不满足则回到步骤(2)。 k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。算法的时间复杂度上界为O(n*k*t), 其中t是迭代次数。k-means算法是一种基于样本间相似性度量的间接聚类方法,属于非监督学习方法。此算法以k为参数,把n 个对象分为k个簇,以使簇内具有较高的相似度,而且簇间的相似度较低。相似度的计算根据一个簇中对象的平均值(被看作簇的重心)来进行。此算法首先随机选择k个对象,每个对象代表一个聚类的质心。对于其余的每一个对象,根据该对象与各聚类质心之间的距离,把它分配到与之最相似的聚类中。然后,计算每个聚类的新质心。重复上述过程,直到准则函数收敛。k-means算法是一种较典型的逐点修改迭代的动态聚类算法,其要点是以误差平方和为准则函数。逐点修改类中心:一个象元样本按某一原则,归属于某一组类后,就要重新计算这个组类的均值,并且以新的均值作为凝聚中心点进行下一次象元素聚类;逐批修改类中心:在全部象元样本按某一组的类中心分类之后,再计算修改各类的均值,作为下一次分类的凝聚中心点。

最新文章
热门文章
推荐阅读