• k-means算法总结


    1.原理

      聚类是一种无监督学习的方法,其实质是依据某种距离度量,使得同一聚簇之间的相似性最大化,不同聚簇之间的相似性最小化,即把相似的对象放入同一聚簇中,把不相似的对象放到不同的聚簇中。聚类与分类不同,聚类的输入对象不需要带有类别标签,最后组成的分类是由使用的算法决定的。

    在聚类中,k-means由于其简单、易实现的优点,被广泛使用。

      假设集合是d维向量空间中的集合,其中表示集合中的第i个对象(或称为"数据点"),设矩阵表示k个聚簇中心的集合,其中,表示第j个聚簇标识,向量用于表示每个数据点所属的聚簇。

      k-means算法是一种迭代的贪婪下降求解算法,其目标函数是非凸的,这也是造成只能得到局部最优解的原因,目标函数表达式如下:

      算法的流程主要包括,首先我们随机选择集合中的k个点作为初始的聚簇中心,接着根据将集合中的每个点分配到距离它最近的聚簇中,最后根据每个聚簇中的数据点更新聚簇中心,如此反复地执行后两个步骤直到算法收敛。k-means算法就是通过迭代的方式,将集合中的数据点聚成k个类,其核心步骤主要有:

      1)将数据点分配到距离它最近的聚簇中心

      2)更新聚簇中心(取聚簇中每个数据点坐标的均值)

      算法的详细步骤如表1所示,

    表1 k-means算法的具体步骤

     2.缺陷

      k-means算法存在不少的缺陷,表2列出了k-means算法常见的缺陷以及解决的方法。

    表2 k-means算法缺陷

     

     

    3.扩展

    3.1核方法

      为了能处理形状复杂的聚簇,我们可以通过核方法提高k-means算法对于复杂数据的处理能力。我们知道聚簇边界在原空间中是非线性的,但是,如果是在核函数所隐含的高维空间中却可以线性的。

    3.2加速的k-means

      k-means算法在处理超大数据时,存在时间过长的缺陷,所以针对这个缺点,提出了不少的改进算法。例如可以通过使用kd-树或者利用三角不等式,减少在重新划分聚簇这个步骤的计算量。

    3.3柔性k-means

      柔性k-means是与刚性k-means相对的,刚性的k-means即基本的k-means算法,将每个数据点划分到唯一一个聚簇中。而在柔性的k-means算法中,将每个数据点依据概率赋给每个聚簇,即柔性k-means中,每个数据点都有一个权重(概率)向量,用来描述每个数据点属于每个聚簇的可能性。

     4.小结

      k-means算法使用简单的迭代将数据集聚成k个类,迭代的核心步骤有:(1)更新聚簇中心;(2)更新聚簇标识。尽管它有不少缺陷,但是其实现简单、移动、伸缩性良好等优点使得它成为聚类中最常用的算法之一。

     

    参考文献

    [1]Xindong Wu,Vipin Kumar.数据挖掘十大算法[M].北京:清华大学出版社.2014:19-30.

  • 相关阅读:
    安装 android sdk 时,dl.google.com 连不上各种尝试
    解决android SDK 安装过程中 packages 列表为空的问题
    Java 集合 -- Deque
    Java 集合 -- Queue
    Java 集合 -- Set
    Java 集合 -- Map
    Java 集合 -- List
    Java 语言进阶 -- 线程
    Java 语言基础知识
    Java 网络编程基础 -- TCP 编程
  • 原文地址:https://www.cnblogs.com/xugenpeng/p/4821502.html
Copyright © 2020-2023  润新知