聚类算法----之----(k-means)

来源:互联网 发布:自己设计装修画图软件 编辑:程序博客网 时间:2024/05/19 23:10

1.基本k-means算法:

    1:选择K个点作为初始质心

    2:repeat

    3:将每个点指派到最近的质心,形成K个簇

    4:重新计算每个簇的质心

    5:until 质心不发生变化

K-means聚类算法,整个算法中有两个量非常重要:K 和means(均值。K是指期望的簇的个数,是需要人为设定的参数;而means指的是簇的均值向量。

K-means聚类算法的空间需求是适度的,因为只需要存放数据点和质心;它的时间需求也是适度的,基本上与数据点的个数线性相关:

    空间复杂度:O((m+K)n) 

        m:点数 

        n:属性数 

        K:簇数

    时间复杂度:O( I x K x m x n) 

        I:收敛所需要的迭代次数

        m:点数 

        n:属性数 

        K:簇数

    距离的度量:

    常用的距离度量方法包括:

        1.欧几里得距离

        2.余弦相似度

         两者都是评定个体间差异的大小的。 欧几里得距离度量:会受指标不同单位刻度的影响,所以一般需要先进行标准化,同时距离越大,个体间差异越大;空间向量余弦夹角的相似度度量:不会受指标刻度的影响,余弦值落于区间[-1,1],值越大,差异越小。

    k-means的缺点:

    1.需要指定k值

    2.选择初始质心是随机的

    3.k-means算法对初始化非常敏感

    4.空簇

   解决 随机初始化局限的思路:

        1.多次运行,每次使用不同的随机初始质心,然后选取具有最小SSE(误差的平方和,也称:散布,度量聚类质量的目标函数)的簇集;(一般不能克服)

        2.取一个样本,并使用层次聚类技术对它聚类;(适用于a:样本相对较小,例如数百到数千【层次聚类开销较大】;b:K相对于样本大小较小)

        3.a:随机地选择第一个点,或取所有点的质心作为第一个点;

           b:然后,对于每个后继初始质心,选择离已经选取过的初始质心最远的点。

           优:得到的初始质点不仅能确保是随机的,还能是散开的;缺:可能选中离群点;此外,求离当前初始质心集最远的点开销也非常大

    处理空簇:

        如果所有的点在指派步骤都未分配到某个簇,就会得到空簇

        1.选择一个距离当前任何质心最远的点,这将消除当前对总平方误差影响最大的点

        2.从具有最大SSE的簇中选择一个替补质心,这将分裂簇并降低聚类的总SSE

2.k-means++算法:

    1.初始化中心点集合

    2.和k-means一样,从数据点中随机选择第一个中心点

    3.重复如下过程,知道选出K个初始化中心点为止

        a:计算每个数据点到其最近的中心点的距离D

        b:以正比于D的概率,随机选择一个数据点作为新中心点加入中心点集合中

        c:repeat

k-means++算法是对k-means的一种改进,选择初始中心点的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。

3.二分k-means算法:

    1.初始化簇表,使之包含由所有的点组成的簇

    2.repeat

        a.从簇表中取出一个簇

        b.{对选定的簇进行多次二分“实验”}

        c.for i=1 to 测试次数 do

            使用基本K均值,二分选定簇

           end for

        d.将这两个簇添加到簇表中

    3.until簇表中包含K个簇

二分K-means算法是基本K-means算法的直接扩充,它基于一种简单想法:为了得到K个簇,将所有点的集合分裂成两个簇,从这些簇中选取一个继续分裂,如此下去,直到产生K个簇。

选择待分裂簇的方法:

    1.选择最大的簇

    2.选择具有最大SSE的簇

    3.基于大小和SSE的标准进行选择

    ........


参考资料:《数据挖掘导论》-----  Pang-Ning Tan等著  -----  范明等译


原创粉丝点击