kmeans是简单易懂又很常用的一种聚类方法。
对于kmeans的聚类,我着力弄懂如下一些问题:
- 质心初始化的方式
- 评测指标
聚类步骤
- 初始化K个质心。
- 对于每个样本点,计算它到所有质心的距离,选择距离最近的质心作为它归属的簇。
- 所有的样本点迭代完毕,分簇完成,每个簇重新计算质心。
- 迭代2,3步骤,直到质心不再移动或者达到迭代次数。
质心的初始化方式
sklearn的质心有如下几种初始化方式:
- random。随机选出k个质心。缺点是选出来的初始质心可能不合理,导致聚类结果不好。中间还会有收敛过慢的问题。
- kmeans++。过程稍微复杂一些,目标是选出来的质心相对距离都比较远。参考链接
评测指标
1. 轮廊系数(Silhouette Coefficient)
这个指标可以衡量类内的聚合程度和类间的离散程度。
对于单个样本的轮廊系数,可以使用:
解释如下:
-
表示该样本点到同簇样本的平均距离。
越小表示i在这个簇越合理。
-
表示该样本点到其他簇样本点的平均聚类。
越大表示i越不属于其他的簇。
s(i)的取值范围是[-1,1],越大说明该点分配正确的概率越高。对所有样本点取均值就获得了平均轮廊系数。
k值的选择
网上关于k值的选择,最经典的是手肘法。但是有人说,在实际情况中,画出来的曲线很难像手肘一样,最好还是根据实际业务来确定分的类别。
手肘法
手肘法的核心指标是SSE(sum of the squared errors,误差平方和),随着K值的增大,理论上SSE会递减,直到到达一个合理的簇数,当K再减小的时候,SSE就不会降低太多。
最终的曲线是达到理想的K值之前,SSE快速下降;超过了理想的K值,下降速度减缓,出现一个肘部。
这里的SSE也可以使用轮廊系数来确定。
网友评论