K-Means 聚类原理

作者: 安哥生个信 | 来源:发表于2019-02-20 08:30 被阅读130次

    前言

    K-Means 是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。

    原理

    假设有一些点分散在直线上,现在需要对这些点进行聚类分析。

    1

    聚类过程

    第一步,想一下我们希望最终将这些点聚为多少类?

    假设我们希望聚为3类

    提前指定分类数,即K-means中K的含义

    第二步,在这些点中随机选择3个点,作为初始簇(initial cluster)

    2

    第三步,计算第一个点f分别到这3个initial cluster的距离

    3

    第四步,将第一个点归属为距离最近的那个cluster

    4

    重复第三/四步

    5

    一一判断所有点的归属

    6

    第五步,计算每一个cluster的均值

    7

    然后像之前一样,通过计算每个点到这些均值的距离,重新判断每个点归属于哪个cluster

    8

    判断完每个点的归属之后,重新计算均值……判断归属……计算均值……判断归属……直到聚出来的cluster不再变化

    9

    在这个案例中,我们第一次随机的3个initial cluster就不再变化了,这是个巧合。一般而言,需要多轮均值计算后,cluster才会稳定。下面的案例便是。

    判断聚类的好坏

    很明显,上面的聚类效果很差,还不如我们肉眼聚类出来的效果。是否有办法判断不同聚类结果的好坏呢?

    10

    第一步,计算每一个cluster的总变差(total variation)

    11

    第二步,重新选择3个initial cluster,并且多次迭代判断cluster,计算total variation

    12

    第三步,多次重复上一步的内容,选择total variation最小的聚类结果

    13

    重复聚类的次数可以选择遍历所有点的组合,也可以设置固定数字

    例如R中kmeans()函数中nclust参数代表尝试不同initial cluster的次数

    选择最优K值

    在本文的案例中,我们通过肉眼可以判断出K选择3比较好。但是如果我们自己无法判断时,如何处理?

    一种方法是直接尝试不同的K值进行聚类

    K=1是最差的一种结果,total variation此时最大

    14

    K=2的效果会稍微好些

    15

    随着K值增大,total variation也逐渐减小;当K=N(样本数)时,total variation降至0。

    绘制total variation随K值变化的elbow plot

    16

    可以看出,K>3时,variation的降低速率明显降低。所以K=3是较好的选择。

    多维数据K-means

    二维平面上的点,可以通过欧式距离来判断聚类

    17

    然后同之前一般,计算平面上同一cluster的中心,重新判断点的归属,寻找中心……判断归属……

    18

    欧式距离的详细说明,可以参考Hierarchical Clustering

    Heatmap K-means

    对于热图相关数据,也可以通过欧式距离来判断样本的聚类

    19

    详细过程请参考Hierarchical Clustering

    Reference

    https://blog.csdn.net/huangfei711/article/details/78480078

    https://www.biaodianfu.com/k-means-choose-k.html

    https://www.youtube.com/watch?v=4b5d3muPQmA&feature=youtu.be

    相关文章

      网友评论

        本文标题:K-Means 聚类原理

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