5分钟学会K均值聚类算法

Posted ItStar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5分钟学会K均值聚类算法相关的知识,希望对你有一定的参考价值。

5分钟学会K均值聚类算法我  相  信  这  么  优秀  的  你 

 已  经  置 顶  了  我


K均值(K-means)算法

算法介绍

K-means是一个常用的聚类算法来将数据点按预定的簇数进行聚集。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。

假设要把样本集分为c个类别,算法描述如下:

(1)适当选择c个类的初始中心;

(2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类;

(3)利用均值等方法更新该类的中心值;

(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。

MLlib工具包含并行的K-means++算法,称为kmeans||。Kmeans是一个Estimator,它在基础模型之上产生一个KMeansModel。

5分钟学会K均值聚类算法

K-means的意义和使用场景

在无任何先验分类知识的情况下,自动发现数据集的分类。例如:

  1. 在大量文本中发现隐含的话题;

  2. 发现图像中包含的颜色种类;

  3. 从销售数据中发现不同特征顾客的分类。


算法步骤

  • 假设希望将训练数据集x^{(i)} (i = 1, 2, 3,..., m)分为K类;

  • 在x^{(i)} (i = 1, 2, 3,..., m)中,随机选择K个作为初始分类的图心(centroids) mu _{1}, mu _{2}, mu _{3},..., mu _{K};

  • 遍历x^{(i)},计算出和每个x距离最近的图心mu ^{(i)},记录当前x属于第i类;

  • 遍历K种分类,分别计算上一步中,划归其中的所有x点的中心点,将该点设置为本分类中心的图心;

  • 迭代上两步,直到图心位置收敛。


Matlab仿真:K-means过程


5分钟学会K均值聚类算法


随机初始化 Random Initialisation


由于初始的图心是随机选择的,K-means可能陷入局部最优而导致最终的图心无法收敛到合适的位置。可以使用随机初始化来解决这个问题:


多次运行K-means算法,计算c^{(1)},..., c^{(m)}, mu _{1},..., mu _{k};

计算Cost Function J = (c^{(1)},..., c^{(m)}, mu _{1},..., mu _{k}),函数代表了聚类的失真程度;

选择J最小的那一组初始化以及最终的计算结果。

选择聚类数量

    • 使用「肘方法」Elbow Method  

    • 逐渐增加K,并分别计算Cost Function J,寻找J较小的K,如图:

    • 5分钟学会K均值聚类算法
    • 理论上,当分类数量K增大时,J将逐渐变小;

    • 但也可能陷入局部最优的问题,导致k增大时,J反而增大。此时需要重新随机初始化后再次计算。

    •  Ng推荐的办法:向自己提问「我为什么要使用K-means」?充分理解聚类的需求以及聚类后能向下游贡献什么东西,往往能从中发现真正合适的聚类数量。例如下图:

    5分钟学会K均值聚类算法
  • 横轴为衣服店顾客的身高,纵轴为顾客的体重。当你理解了顾客可能分为「S、M、L」三类,或者「XS、S、M、L、XL」五类时,最终选择的分类数量可能比较make sense,而不是完全依赖Cost Function算出一个10类或者4类,最终并没有太大实际意义。

实践:使用K-means压缩图像

思路:

  • 对一个RGB图像执行K-means算法,寻找能描述图像的16种主要颜色分类;

  • 将每个像素点聚类到这16种颜色分类中,并分别替换为对应分类的颜色;

  • 对每个像素使用颜色的索引来代替3维的RGB亮度值,由此可以将图像的大小压缩到六分之一

仿真图:

5分钟学会K均值聚类算法

如果想对算法进行更一步的学习,或者想查看源代码的同学,可以扫描下方下方海报的二维码或者直接搜索程序员小助手的微信,更有原价199元一次的ItStar大咖提高班课程免费开放给大家,想报名的同学赶快加入吧!

5分钟学会K均值聚类算法


听说点赞和分享的朋友都已走上人生巅峰

以上是关于5分钟学会K均值聚类算法的主要内容,如果未能解决你的问题,请参考以下文章

k均值聚类算法、c均值聚类算法、模糊的c均值聚类算法的区别

k均值算法

聚类之K均值聚类和EM算法

3.K均值算法

数字数据集上的K-均值聚类

K均值聚类算法