聚类算法——k-means算法

数据挖掘

数据挖掘(Data Mining,DM)是从大量数据中提取信息以查看隐藏的知识并便于将其用于实时应用程序。 DM有多种用于数据分析的算法。用于分析的一些主要DM技术是聚类,关联,分类等。聚集是用于探索性数据分析的有效技术,并已在各种领域中找到应用。大多数现有的聚类方法可以分为三类:分区,分层,基于网格和基于模型的方法。基于分区的聚类生成数据分区,使得集群中的对象与其他集群中的对象相比更加相似。 k-Means ,EM 和k-medoids 是分割方法的例子。分区算法的优点是能够通过在目标函数中使用适当的原型和距离度量来整合有关全局形状或集群大小的知识。

聚类分析

聚类分析仅基于描述对象及其关系的数据中的信息对数据对象进行分组。 目标是组内的对象彼此相似(或相关),与其他组中的对象不同(或无关)。 组内相似性(或同质性)越大,组间差异越大,聚类越好或越明显。本文主要介绍最为常用的一种聚类算法——k-means算法。

算法介绍

k-means是解决众所周知的聚类问题的最简单的无监督学习算法之一。该过程遵循一个简单的方法,通过一定数量的聚类(假设k个聚类)对给定的数据集进行分类。主要想法是定义k个质心,每个集群一个。

基于这样一个假设,我们再来导出k-means所要优化的目标函数:设我们一共有N个数据点需要分为k个cluster,而k-means要做的就是要最小化这个目标函数

《聚类算法——k-means算法》  

这个函数,其中《聚类算法——k-means算法》在数据点n被归类到cluster k的时候为1,否则为0。直接寻找 《聚类算法——k-means算法》 《聚类算法——k-means算法》来最小化J并不容易,不过我们可以采取迭代的办法:先固定 《聚类算法——k-means算法》,选择最优的《聚类算法——k-means算法》,很容易看出,只要将数据点归类到离他最近的那个中心就能保证《聚类算法——k-means算法》最小。下一步固定《聚类算法——k-means算法》,再求最优的《聚类算法——k-means算法》 。将J对《聚类算法——k-means算法》求导并令导数等于零,很容易得到J最小的时候《聚类算法——k-means算法》应该满足:

《聚类算法——k-means算法》

亦即《聚类算法——k-means算法》的值应当是所有cluster k中的数据点的平均值。由于每次一次迭代都是取到J的最小值,因此J只会不断地减小(或者不变),而不会增加 ,这样证明k-means最终会到达一个极小值。虽然k-means并不能保证总是能得到全局最优解,但是对于这样的问题,像k-means这种复杂度的算法,这样的结果已经是很不错的了。

算法步骤

  1. 选定K个中心《聚类算法——k-means算法》的初值。这个过程通常是针对具体的问题有一些启发式的选取方法,或者大多数情况下采用随机选取的办法。因为前面说过k-means并不能保证全局最优,而是否能收敛到全局最优解其实和初值的选取有很大的关系,所以有时候我们会多次选取初值跑k-means,并取其中最好的一次结果。
  2. 将每个数据点归类到离它最近的那个中心点所表示的cluster中。
  3. 用公式《聚类算法——k-means算法》计算出每个cluster新的中心点。
  4. 重复第二步,直到循环迭代了最大步数或者前后的目标函数J的值相差小于一个阈值为止。

《聚类算法——k-means算法》

总结

虽然k-means的算法思路很清晰也很简单合理,不过还是在某些方面有些不足:k-means对于噪声十分敏感。当我们在选取聚类的中心点时,是选择样本点的平均值。当样本中有“离群点”时,在计算质点的过程中就会收到噪声的异常维度干扰,造成所得质点和实际质点的偏差过大,从而使类簇发生畸形。而针对这一问题,k-medoids算法便很好的解决了这一问题,这个算法将在之后的文章中介绍。

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/coder_Gray/article/details/79702065
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞