一、什么是聚类:
聚类算法属于无监督学习(仅有输入特征x,没有标签y,由模型自己发现一些东西并输出)的一种。
对于包含特征x1、x2的数据集,样本分布如上图所示,聚类算法可以分析样本之间特征的相似性并将样本分成多个组。
二、K-means算法直观理解:
K-means算法的目的是计算簇质心的最终位置,从而将样本点分成多组。
算法执行流程如下:
-
step1:K-means算法做的第一件事是随机初始化聚类的中心位置(簇质心)。
-
step2:repeat:
- 将点分配给簇质心:遍历所有点,检查每个点更接近哪个簇质心,就把该点分配给相应簇质心。
- 移动簇质心:遍历所有簇质心,查看分配给该簇质心的所有点,计算所有点的平均值,并将该簇质心移到平均值的位置。
- 将点分配给簇质心:遍历所有点,检查每个点更接近哪个簇质心,就把该点分配给相应簇质心。
-
step3:若簇质心位置不再变化或变化幅度非常小(使用损失函数来衡量),则可以认为簇质心位置已经收敛。
三、K-means算法详解:
四、使用损失函数衡量簇质心是否收敛:
在每次repeat(分配簇质心移动簇质心)之前,都计算损失函数判断簇质心位置收否收敛,若相较于上一轮循环的损失下降不大或停止下降,则表明收敛,跳出循环。
五、如何初始化簇质心位置:
常见的初始化簇质心位置的方式如下:
注意,簇质心初始值很大程度上会影响聚类算法的结果,如图:
对于不同的初值,会得到不同的聚类结果,很显然下面两种结果都不理想,那么如何防止初值对聚类结果的影响呢?
答案是进行多次实验,每次选择不同初始值得到聚类结果。最终多个实验通过比较损失函数J的值来确定选择哪次实验结果作为最终聚类的结果。
六、如何确定初始化聚类数:
通过实验不断调整聚类数K的取值,然后绘制K关于损失J的图像,图像肘部所对应的K即为最优K选择。