K-Means 聚类算法

2019-12-12  本文已影响0人  Zaker_cook

问题

    1. KMeans 执行流程是怎么样?

    2. KMeans 都有哪些优缺点?

    3. 对于KMeans算法不足之处,该怎么样解决?


1. KMeans 算法流程

        损失函数: J(A) = \frac{1}{2} \sum_{i=1}^k\sum_{j=1}^n(x_j-a_i)^2,其中x_j是簇中样本,a_i是簇中心点

        a.  随机从样本数据中选择K个样本,作为初始的簇中心点

        b. 分别计算各个样本到K个簇中心点的距离,并将样本划分到距离最近的簇中

        c. 将簇内样本的均值作为新的簇中心

        d. 循环 b 和 c 步骤,直到满足停止条件(前后两次簇中心位置变化是否在某一个阈值内)


    2. KMeans的优缺点

           优点

                    a. 原理简单,易于理解,聚类效果较好

                    b. 可解释性较好

            缺点

                    a. 不好把握K值的选择

                    b. 对初始簇中心点敏感

                    c. 离群点对模型影响较大

                    d. 对大小差异过大的数据效果不好


   3.  KMeans 的优化

    对于初始簇中心点敏感问题,可以使用 二分KMeans 来优化

    二分KMeans 算法流程

    a.  将所有样本数据作为一个簇,放进队列中

    b.  从队列中选择  损失函数J(A)最大的一个簇样本数据最多的一个簇 进行 K=2 的KMeans 划分,并将划分后的子簇放进队列

    c. 循环迭代 b 步骤,直到队列中的簇的个数满足 K 个簇为止

    对于初始簇中心点敏感问题,也可以使用 KMeans++ 来优化

   参考资料:KMeans++算法思想


    对于K值的选取,可以使用 手肘法 

    手肘法的思想:随着K值的增大,每个簇的聚合程度会逐渐提高,那么损失函数J(A)会逐渐变小。当K小于真实聚类数时,由于K的增大会大幅增加每个簇的聚合程度,故J(A)的下降幅度会很大,而当K到达真实聚类数时,再增加K所得到的聚合程度回报会迅速变小,所以J(A)的下降幅度会骤减,然后随着K值的继续增大而趋于平缓,也就是说J(A)和k的关系图是一个手肘的形状,而这个肘部对应的K值就是数据的真实聚类数。

参考资料:KMeans最优K值选取

上一篇下一篇

猜你喜欢

热点阅读