zoukankan      html  css  js  c++  java
  • K-Means聚类算法原理

      K-Means算法是无监督聚类算法,它有很多变体。包括初始化优化K-Means++,距离计算优化elkan K-Means算法和大样本优化Mini Batch K-Means算法。

    1. K-Means原理

      K-Means算法思想:按照样本之间距离大小,将样本划分为K个簇。让簇内点尽量连在一起,簇间的距离尽量的大

      (KNN算法思想:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多属于一个类别,则该样本也属于这个类别。)

      用数据表达式表示,簇划分为(C1,C2,...Ck),目标是最小化平方误差E:

      其中μi是簇Ci的均值向量,有时也是质心,表达式:

      直接求上式最小值,不容易,是NP难题,只能采用启发式的迭代算法。

      K-Means采用的启发式方式很简单,用下图可形象描述:

      

      上图a初始数据集,假设 k=2。图b中,随机选择2个类别质心,即图中的红色质心和蓝色质心,然后求样本中所有点到这两个质心的距离,并标记每个样本的类别为距离最小的质心的类别,如图c,这样得到第一轮迭代后的类别。此时,对当前标记的红色和蓝色点分别求新的质心,如图d,图e和图f重复图c和图d的过程。即将所有点的类别标记为距离最近的质心的类别并求新的质心。

    2. 传统K-Means算法流程

    注意事项:

    (1)、k 值的选择,一般根据经验选择一个合适 k 值,没有经验,通过交叉验证选择。

    (2)、k 个质心的选择,质心的初始位置对最后的聚类结果和运行有很大影响。

    算法流程:

    输入:样本集D = {x1,x2,...xm},聚类的簇数k,最大迭代次数N

    输出:簇划分C = {C1,C2,...Ck}

    (1)、从数据集D中随机选择K个样本作为初始的k个质心向量:{μ1,μ2,...μk}

    (2)、对n = 1,2,...N

      a、将簇划分C初始化为Ct = Ø (t = 1,2...k)

      b、对于 i = 1,2,...m,计算样本 xi 和各个质心向量 μj (j = 1,2...k) 的距离:,将 xi 标记为 dij 最小所对应的类别 λi 。此时更新

      c、对于 j = 1,2,...k,对 Cj 中所有样本点重新计算新的质心

      e、如果所有 k 个质心向量没发生变化,转到步骤3.

    (3)、输出簇划分C = {C1,C2,...Ck}

    3. K-Means初始化优化K-Means++

      K-Means++是对K-Means随机初始化质心方法的优化

      策略如下:

      a、从数据中随机选择一个点作为第一个聚类中心 μ1

      b、对数据集中的每个点 xi ,计算它与已选择聚类中心中最近聚类中心的距离

      c、选择一个新的数据点作为新的聚类中心,选择的原则为:D(x)较大的点被选择作为聚类中心的概率大

      d、重复 b 和 c 直到选出 k 个聚类质心

      e、利用这 k 个质心作为初始化质心去运行标准的 K-Means算法

    4. K-Means距离计算优化elkan K-Means

      传统的 K-Means 算法,每轮迭代时,计算所有样本点到所有质心的距离,比较耗时。elkan K-Means 目标是减少不必要的距离计算。

      elkan K-Means 利用两边之和大于第三边,以及两边之差小于第三边来减少距离计算。

      第一种规律是对于每一个样本点 x 和 两个质心。如果预先计算出这两个质心之间的距离 D(j1, j2) ,发现 2D(x, j1) ≤ D(j1, j2),则 D(x, j1) ≤ D(x, j2)。此时不需要计算 D(x, j2) 。

      第二种规律是对于每一个样本点 x 和两个质心。可以得到 D(x, j2) ≥ max{0, D(x, j1) - D(j1, j2)}。这个从三角形性质很容易得到。

      利用上面两个规律,elkan K-Means 比传统的 K-Means 迭代速度有很大提高。但如果样本特征稀疏,有缺失值的话,这个方法不适用,因为某些距离无法计算,不能使用该算法。

    5. 大样本优化 Mini Batch K-Means

      如果样本量非常大,10万以上,特征100万以上,K-Means 非常耗时,就算 elkan K-Means 优化也很耗时。此时用 Mini Batch K-Means。

      顾名思义,Mini Batch,就是用样本集中的一部分做传统的 K-Means,代价就是聚类的精度有一些降低。

      在 Mini Batch K-Means ,选择合适的 batch size 来做 K-Means 聚类。一般通过无放回的随机采样得到。

      为了增加算法的准确性,一般会多跑几次 Mini Batch K-Means 算法,用不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

    6. K-Means与KNN

      不同点:

    1. K-Means是无监督学习的聚类算法,没有样本输出;而KNN是监督学习的分类算法,有对应的类别输出。
    2. KNN基本不需要训练,对测试集里面的点,只需要找到在训练集中最近的k个点,用这最近的k个点的类别来决定测试点的类别。而K-Means则有明显的训练过程,找到k个类别的最佳质心,从而决定样本的簇类别。
    3. KNN数据集有Label,K-Means数据无Label。

      相似点:

      两个算法都包含一个过程,即找出和某一个点最近的点。两者都利用了最近邻(nearest neighbors)的思想。

    7. K-Means小结

      K-Means的主要优点有:

      1)原理比较简单,实现也是很容易,收敛速度快。

      2)聚类效果较优。

      3)算法的可解释度比较强。

      4)主要需要调参仅仅是簇数k

      K-Means的主要缺点有:

      1)K值的选取不好把握

      2)对于不是凸的数据集比较难收敛

      3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。

      4) 采用迭代方法,得到的结果只是局部最优

      5) 对噪音和异常点比较的敏感

     来自:刘建平

  • 相关阅读:
    怎样从基本原理解释复制型共享账本的价值
    BZOJ3223:文艺平衡树——超详细题解
    BZOJ3223:文艺平衡树——超详细题解
    BZOJ3223:文艺平衡树——超详细题解
    BZOJ3223:文艺平衡树——超详细题解
    my stackoverflow
    my stackoverflow
    my stackoverflow
    my stackoverflow
    STM32 Flash 永久用户数据空间
  • 原文地址:https://www.cnblogs.com/keye/p/10520177.html
Copyright © 2011-2022 走看看