k-means算法总结

作者: 易码当先 | 来源:发表于2019-08-08 15:09 被阅读3次

    目录

    一、k-means算法原理

    二、k-means算法目标函数是什么

    三、总结


    一、k-means算法原理 

    k-menas是无监督的算法,其思想是将样本集中的样本按照样本间的距离划分为k个簇,让簇内的点尽量紧密地连在一起,而让簇间的距离尽量的大。(同一簇内的点距离越近,意味着两个样本的相似度越高,不同簇之间距离越远,意味着两个簇的相似度越低)

    算法步骤

    1、用先验知识或交叉验证选择一个合适的k值。

    2、随机选择k个样本作为初始的质心。

    3、计算每个样本点和各个质心的距离,将样本点标记为距离最小的质心所对应的簇。

    4、重新计算每个的质心,取该簇中每个点位置的平均值。

    5、重复2,3,4步直到k个质心都没有发生变化为止。

    可见k-means算法时间复杂度为O(KN)

    那么:k-means算法的k值该如何选择及其目标函数又是什么呢?


    二、k-means算法目标函数

    假设 D ={x_{1} ,x_{2} ,x_{3}  ...x_{n} }  x_{i} \in R^d,其中D为样本集,x_{i} 为向量

    参数1 --> 质心 \mu _{1} \mu _{2}  ...\mu _{n}

    参数2 ---> 所属质心 r_{ik}  { 1:x_{i}  属于第k个质心 ;0:otherwise  例:k=3,如果样本属于第二个质心,则 r_{i}  表示为(010)的独热编码形式 }

    基于以上假设条件,k-menas 目标函数为

           \prod_{i=1}^n \coprod_{k=1}^k r_{ik} (x_{i}  - \mu _{k)^2 }   求解\Rightarrow {\mu  和 \gamma }  

    解析:其中 \coprod_{k=1}^k r_{ik}  表示样本只在当前所属质心计算一次,虽然加∑ ,但独热编码的形式,只计算所属质心距离,其他质心时为0,未参与距离计算。


    四、总结

    1、k-means算法是一种无监督的聚类算法。

    2、k-means算法一定会收敛。

    3、k-means算法总的时间复杂度为O(nk) [k=簇数,n=样本容量 ] 。

    4、k-means算法的目标函数为:

    indicator object

    可使用EM算法优化目标函数,减少样本点到质心的距离。

    5、由于k-means算法的目标函数是非凸函数,它没有全局最优解,只有局部最优解。因此k值选择越好,目标函数的值越好。

    6、k-means算法主要用于用户分层、图像分割等方面。

    相关文章

      网友评论

        本文标题:k-means算法总结

        本文链接:https://www.haomeiwen.com/subject/uxiwdctx.html