一.直观例子
我们前面所学的都是有监督的机器学习算法,即我们会给测试集人为的给一个标签值,不管是拟合问题也好,还是分类问题也好。但k-means算法就不需要这个标签值,它会“自己”找到数目确定的分类类别。比如下面的一个例子。
我们不断地进行簇分类,移动聚类中心,如下所示:



最终,我们成功的划分出了预定数目为2的两个类。
二. 具体算法及代价函数
一些符号说明
K: 预先设置的分类数目
,表示当前样本
所属的类
,表示第k个类的聚类中心
,表示
所属类的聚类中心
(1)我们从样本中随机选择K个样本点作为我们的聚类中心,聚类中心的初始化不同,可能会造成不同的局部最优解,所以我们要做多次聚类中心的随机选择,对初始化后的每一个聚类中心都做一次k-means算法,最后选择代价函数较小的作为我们的分类结果。
(2)执行簇分类:即对每一个样本点计算到各个聚类中心的距离,并选择距离最小的聚类,将它划分到该类中
(3)移动聚簇中心:计算每个分类的平均值,并将该平均值设为新的聚类中心
(4)重复步骤(1),知道达到相应的初始化次数
代价函数:
,即每一个样本点到各自聚类中心距离之和的平均值。
三.K值的选择
K值得选择可以利用肘部法则:即我们从一个较小的k值出发,逐步增长到一个较大的k值,若存在某一点,越过该点后代价函数不会有很大的改变,我们就以该点作为K值。
如下图所示
,
我们选择3作为聚簇数目。
但由于不总是存在这样的值,我们更常见的是利用实际的应用场景去手动选择。
