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

    二. 具体算法及代价函数
    image.png
    一些符号说明
    K: 预先设置的分类数目
    image.png,表示当前样本image.png所属的类
    image.png,表示第k个类的聚类中心
    image.png,表示image.png所属类的聚类中心
    (1)我们从样本中随机选择K个样本点作为我们的聚类中心,聚类中心的初始化不同,可能会造成不同的局部最优解,所以我们要做多次聚类中心的随机选择,对初始化后的每一个聚类中心都做一次k-means算法,最后选择代价函数较小的作为我们的分类结果。
    (2)执行簇分类:即对每一个样本点计算到各个聚类中心的距离,并选择距离最小的聚类,将它划分到该类中
    (3)移动聚簇中心:计算每个分类的平均值,并将该平均值设为新的聚类中心
    (4)重复步骤(1),知道达到相应的初始化次数

    代价函数:image.png,即每一个样本点到各自聚类中心距离之和的平均值。
    三.K值的选择
    K值得选择可以利用肘部法则:即我们从一个较小的k值出发,逐步增长到一个较大的k值,若存在某一点,越过该点后代价函数不会有很大的改变,我们就以该点作为K值。
    如下图所示
    image.png
    我们选择3作为聚簇数目。
    但由于不总是存在这样的值,我们更常见的是利用实际的应用场景去手动选择。