1、算法流程
K-Means算法是一种无监督学习算法,用于将含有m个样本的数据集D{x(1),x(2),x(3)...x(m)}分成k类。
代价函数如下(又称畸变函数 distortion function):
其中,ci表示样本xi所属聚类的编号,μj表示聚类中心的坐标。
算法流程如下:
- 选择聚类的数量k,并随机初始化聚类中心μ1,μ2...μk。
- 对每一个样本xi,分别计算与k个聚类中心的距离||xi-μj||(j=1,2...k)。将样本xi划分到距离最小的那一个聚类中心。
- 对每一个聚类中心μj(j=1,2...k),计算其所包含的样本特征平均值作为新的聚类中心。如果聚类中心变化或代价函数变化小于某一阈值,则停止迭代,否则转到上一步。
2、随机初始化
初始化不同的聚类中心,可能得到不同的聚类结果,为了防止算法陷入局部最优,需要进行多次随机初始化,方法如下:
选定聚类数k和要随机初始化的次数t,每一次初始化后执行第1节中的聚类算法,收敛后计算代价函数值。最终,选择代价函数值最小的聚类中心作为随机初始化的聚类中心。
3、聚类参数k的选择
方法1:肘部法
以聚类个数k为自变量,以对应的代价函数值为因变量绘制图形,选择图形中的函数拐点对应的k为最佳聚类个数。肘部法示意图
但是,实际应用中绘制的曲线可能不存在明显的拐点,因此该方法不总是奏效。
方法2:人工选择
依据聚类算法的动机和实际需求选择k值。
