二、原型聚类

  1. 原型聚类prototype-based clustering假设聚类结构能通过一组原型刻画。

    常用的原型聚类有:

    • k均值算法k-means
    • 学习向量量化算法Learning Vector Quantization:LVQ
    • 高斯混合聚类Mixture-of-Gaussian

2.1 k-means 算法

2.1.1 k-means

  1. 给定样本集 二、原型聚类 - 图1, 假设一个划分为 二、原型聚类 - 图2

    定义该划分的平方误差为:

    二、原型聚类 - 图3

    其中 二、原型聚类 - 图4 是簇 二、原型聚类 - 图5 的均值向量。

    • 二、原型聚类 - 图6 刻画了簇类样本围绕簇均值向量的紧密程度,其值越小,则簇内样本相似度越高。
    • k-means 算法的优化目标为:最小化 二、原型聚类 - 图7 。即:二、原型聚类 - 图8
  2. k-means 的优化目标需要考察 二、原型聚类 - 图9 的所有可能的划分,这是一个NP难的问题。实际上k-means 采用贪心策略,通过迭代优化来近似求解。

    • 首先假设一组均值向量。

    • 然后根据假设的均值向量给出了 二、原型聚类 - 图10 的一个划分。

    • 再根据这个划分来计算真实的均值向量:

      • 如果真实的均值向量等于假设的均值向量,则说明假设正确。根据假设均值向量给出的 二、原型聚类 - 图11 的一个划分确实是原问题的解。
      • 如果真实的均值向量不等于假设的均值向量,则可以将真实的均值向量作为新的假设均值向量,继续迭代求解。
  3. 这里的一个关键就是:给定一组假设的均值向量,如何计算出 二、原型聚类 - 图12 的一个簇划分?

    k均值算法的策略是:样本离哪个簇的均值向量最近,则该样本就划归到那个簇。

  4. k-means 算法:

    • 输入:

      • 样本集 二、原型聚类 - 图13
      • 聚类簇数 二、原型聚类 - 图14
    • 输出:簇划分 二、原型聚类 - 图15

    • 算法步骤:

      • 二、原型聚类 - 图16 中随机选择 二、原型聚类 - 图17 个样本作为初始均值向量 二、原型聚类 - 图18

      • 重复迭代直到算法收敛,迭代过程:

        • 初始化阶段:取 二、原型聚类 - 图19

        • 划分阶段:令 二、原型聚类 - 图20

          • 计算 二、原型聚类 - 图21 的簇标记:二、原型聚类 - 图22

            即:将 二、原型聚类 - 图23 离哪个簇的均值向量最近,则该样本就标记为那个簇。

          • 然后将样本 二、原型聚类 - 图24 划入相应的簇:二、原型聚类 - 图25

        • 重计算阶段:计算 二、原型聚类 - 图26二、原型聚类 - 图27

        • 终止条件判断:

          • 如果对所有的 二、原型聚类 - 图28,都有 二、原型聚类 - 图29,则算法收敛,终止迭代。
          • 否则重赋值 二、原型聚类 - 图30
  5. k-means 优点:

    • 计算复杂度低,为 二、原型聚类 - 图31 ,其中 二、原型聚类 - 图32 为迭代次数。

      通常 二、原型聚类 - 图33二、原型聚类 - 图34 要远远小于 二、原型聚类 - 图35,此时复杂度相当于 二、原型聚类 - 图36

    • 思想简单,容易实现。

  6. k-means 缺点:

    • 需要首先确定聚类的数量 二、原型聚类 - 图37

    • 分类结果严重依赖于分类中心的初始化。

      通常进行多次k-means,然后选择最优的那次作为最终聚类结果。

    • 结果不一定是全局最优的,只能保证局部最优。

    • 对噪声敏感。因为簇的中心是取平均,因此聚类簇很远地方的噪音会导致簇的中心点偏移。

    • 无法解决不规则形状的聚类。

    • 无法处理离散特征,如:国籍、性别 等。

  1. k-means 性质:

    • k-means 实际上假设数据是呈现球形分布,实际任务中很少有这种情况。

      与之相比,GMM 使用更加一般的数据表示,即高斯分布。

    • k-means 假设各个簇的先验概率相同,但是各个簇的数据量可能不均匀。

    • k-means 使用欧式距离来衡量样本与各个簇的相似度。这种距离实际上假设数据的各个维度对于相似度的作用是相同的。

    • k-means 中,各个样本点只属于与其相似度最高的那个簇,这实际上是 分簇。

    • k-means 算法的迭代过程实际上等价于EM 算法。具体参考EM 算法章节。

2.1.2 k-means++

  1. k-means++ 属于 k-means 的变种,它主要解决k-means 严重依赖于分类中心初始化的问题。

  2. k-means++ 选择初始均值向量时,尽量安排这些初始均值向量之间的距离尽可能的远。

  3. k-means++ 算法:

    • 输入:

      • 样本集 二、原型聚类 - 图38
      • 聚类簇数 二、原型聚类 - 图39
    • 输出:簇划分 二、原型聚类 - 图40

    • 算法步骤:

      • 二、原型聚类 - 图41 中随机选择1个样本作为初始均值向量组 二、原型聚类 - 图42

      • 迭代,直到初始均值向量组有 二、原型聚类 - 图43 个向量。

        假设初始均值向量组为 二、原型聚类 - 图44。迭代过程如下:

        • 对每个样本 二、原型聚类 - 图45 ,分别计算其距 二、原型聚类 - 图46 的距离。这些距离的最小值记做 二、原型聚类 - 图47
        • 对样本 二、原型聚类 - 图48,其设置为初始均值向量的概率正比于 二、原型聚类 - 图49 。即:离所有的初始均值向量越远,则越可能被选中为下一个初始均值向量。
        • 以概率分布 二、原型聚类 - 图50 (未归一化的)随机挑选一个样本作为下一个初始均值向量 二、原型聚类 - 图51
      • 一旦挑选出初始均值向量组 二、原型聚类 - 图52,剩下的迭代步骤与k-means 相同。

2.1.3 k-modes

  1. k-modes 属于 k-means 的变种,它主要解决k-means 无法处理离散特征的问题。

  2. k-modesk-means 有两个不同点(假设所有特征都是离散特征):

    • 距离函数不同。在k-modes 算法中,距离函数为:

      二、原型聚类 - 图53

      其中 二、原型聚类 - 图54 为示性函数。

      上式的意义为:样本之间的距离等于它们之间不同属性值的个数。

    • 簇中心的更新规则不同。在k-modes 算法中,簇中心每个属性的取值为:簇内该属性出现频率最大的那个值。

      二、原型聚类 - 图55

      其中 二、原型聚类 - 图56 的取值空间为所有样本在第 二、原型聚类 - 图57 个属性上的取值。

2.1.4 k-medoids

  1. k-medoids 属于 k-means 的变种,它主要解决k-means 对噪声敏感的问题。

  2. k-medoids 算法:

    • 输入:

      • 样本集 二、原型聚类 - 图58
      • 聚类簇数 二、原型聚类 - 图59
    • 输出:簇划分 二、原型聚类 - 图60

    • 算法步骤:

      • 二、原型聚类 - 图61 中随机选择 二、原型聚类 - 图62 个样本作为初始均值向量 二、原型聚类 - 图63

      • 重复迭代直到算法收敛,迭代过程:

        • 初始化阶段:取 二、原型聚类 - 图64

          遍历每个样本 二、原型聚类 - 图65 ,计算它的簇标记:二、原型聚类 - 图66 。即:将 二、原型聚类 - 图67 离哪个簇的均值向量最近,则该样本就标记为那个簇。

          然后将样本 二、原型聚类 - 图68 划入相应的簇:二、原型聚类 - 图69

        • 重计算阶段:

          遍历每个簇 二、原型聚类 - 图70

          • 计算簇心 二、原型聚类 - 图71 距离簇内其它点的距离 二、原型聚类 - 图72

          • 计算簇 二、原型聚类 - 图73 内每个点 二、原型聚类 - 图74 距离簇内其它点的距离 二、原型聚类 - 图75

            如果 二、原型聚类 - 图76,则重新设置簇中心:二、原型聚类 - 图77

        • 终止条件判断:遍历一轮簇 二、原型聚类 - 图78 之后,簇心保持不变。

  3. k-medoids 算法在计算新的簇心时,不再通过簇内样本的均值来实现,而是挑选簇内距离其它所有点都最近的样本来实现。这就减少了孤立噪声带来的影响。

  4. k-medoids 算法复杂度较高,为 二、原型聚类 - 图79 。其中计算代价最高的是计算每个簇内每对样本之间的距离。

    通常会在算法开始时计算一次,然后将结果缓存起来,以便后续重复使用。

2.1.5 mini-batch k-means

  1. mini-batch k-means 属于 k-means 的变种,它主要用于减少k-means 的计算时间。

  2. mini-batch k-means 算法每次训练时随机抽取小批量的数据,然后用这个小批量数据训练。这种做法减少了k-means 的收敛时间,其效果略差于标准算法。

  3. mini-batch k-means 算法:

    • 输入:

      • 样本集 二、原型聚类 - 图80
      • 聚类簇数 二、原型聚类 - 图81
    • 输出:簇划分 二、原型聚类 - 图82

    • 算法步骤:

      • 二、原型聚类 - 图83 中随机选择 二、原型聚类 - 图84 个样本作为初始均值向量 二、原型聚类 - 图85

      • 重复迭代直到算法收敛,迭代过程:

        • 初始化阶段:取 二、原型聚类 - 图86

        • 划分阶段:随机挑选一个Batch 的样本集合 二、原型聚类 - 图87 ,其中 二、原型聚类 - 图88 为批大小。

          • 计算 二、原型聚类 - 图89 的簇标记:二、原型聚类 - 图90

            即:将 二、原型聚类 - 图91 离哪个簇的均值向量最近,则该样本就标记为那个簇。

          • 然后将样本 二、原型聚类 - 图92 划入相应的簇:二、原型聚类 - 图93

        • 重计算阶段:计算 二、原型聚类 - 图94二、原型聚类 - 图95

        • 终止条件判断:

          • 如果对所有的 二、原型聚类 - 图96,都有 二、原型聚类 - 图97,则算法收敛,终止迭代。
          • 否则重赋值 二、原型聚类 - 图98

2.2 学习向量量化

  1. 与一般聚类算法不同,学习向量量化Learning Vector Quantization:LVQ假设数据样本带有类别标记,学习过程需要利用样本的这些监督信息来辅助聚类。

  2. 给定样本集 二、原型聚类 - 图99LVQ的目标是从特征空间中挑选一组样本作为原型向量 二、原型聚类 - 图100

    • 每个原型向量代表一个聚类簇,簇标记 二、原型聚类 - 图101。即:簇标记从类别标记中选取。
    • 原型向量从特征空间中取得,它们不一定就是 二、原型聚类 - 图102 中的某个样本。
  3. LVQ的想法是:通过从样本中挑选一组样本作为原型向量 二、原型聚类 - 图103 ,可以实现对样本空间 二、原型聚类 - 图104 的簇划分。

    • 对任意样本 二、原型聚类 - 图105 ,它被划入与距离最近的原型向量所代表的簇中。

    • 对于每个原型向量 二、原型聚类 - 图106,它定义了一个与之相关的一个区域 二、原型聚类 - 图107,该区域中每个样本与 二、原型聚类 - 图108 的距离都不大于它与其他原型向量 二、原型聚类 - 图109 的距离。

      二、原型聚类 - 图110

    • 区域 二、原型聚类 - 图111 对样本空间 二、原型聚类 - 图112 形成了一个簇划分,该划分通常称作 Voronoi剖分。

  4. 问题是如何从样本中挑选一组样本作为原型向量? LVQ的思想是:

    • 首先挑选一组样本作为假设的原型向量。

    • 然后对于训练集中的每一个样本 二、原型聚类 - 图113, 找出假设的原型向量中,距离该样本最近的原型向量 二、原型聚类 - 图114

      • 如果 二、原型聚类 - 图115 的标记与 二、原型聚类 - 图116 的标记相同,则更新 二、原型聚类 - 图117,将该原型向量更靠近 二、原型聚类 - 图118
      • 如果 二、原型聚类 - 图119 的标记与 二、原型聚类 - 图120 的标记不相同,则更新 二、原型聚类 - 图121,将该原型向量更远离 二、原型聚类 - 图122
    • 不停进行这种更新,直到迭代停止条件(如以到达最大迭代次数,或者原型向量的更新幅度很小)。
  5. LVQ算法:

    • 输入:

      • 样本集 二、原型聚类 - 图123
      • 原型向量个数 二、原型聚类 - 图124
      • 各原型向量预设的类别标记 二、原型聚类 - 图125
      • 学习率 二、原型聚类 - 图126
    • 输出:原型向量 二、原型聚类 - 图127

    • 算法步骤:

      • 依次随机从类别 二、原型聚类 - 图128 中挑选一个样本,初始化一组原型向量 二、原型聚类 - 图129

      • 重复迭代,直到算法收敛。迭代过程如下:

        • 从样本集 二、原型聚类 - 图130 中随机选取样本 二、原型聚类 - 图131 ,挑选出距离 二、原型聚类 - 图132 最近的原型向量 二、原型聚类 - 图133二、原型聚类 - 图134
        • 如果 二、原型聚类 - 图135 的类别等于 二、原型聚类 - 图136,则:二、原型聚类 - 图137
        • 如果 二、原型聚类 - 图138 的类别不等于 二、原型聚类 - 图139,则:二、原型聚类 - 图140
  6. 在原型向量的更新过程中:

    • 如果 二、原型聚类 - 图141 的类别等于 二、原型聚类 - 图142,则更新后, 二、原型聚类 - 图143二、原型聚类 - 图144 距离为:

      二、原型聚类 - 图145

      则更新后的原型向量 二、原型聚类 - 图146 距离 二、原型聚类 - 图147 更近。

    • 如果 二、原型聚类 - 图148 的类别不等于 二、原型聚类 - 图149,则更新后, 二、原型聚类 - 图150二、原型聚类 - 图151 距离为:

      二、原型聚类 - 图152

      则更新后的原型向量 二、原型聚类 - 图153 距离 二、原型聚类 - 图154 更远。

  7. 这里有一个隐含假设:即计算得到的样本 二、原型聚类 - 图155 (该样本可能不在样本集中) 的标记就是更新之前 二、原型聚类 - 图156 的标记。

    即:更新操作只改变原型向量的样本值,但是不改变该原型向量的标记。

2.3 高斯混合聚类

  1. 高斯混合聚类采用概率模型来表达聚类原型。

  2. 对于 二、原型聚类 - 图157 维样本空间 二、原型聚类 - 图158 中的随机向量 二、原型聚类 - 图159 ,若 二、原型聚类 - 图160 服从高斯分布,则其概率密度函数为 :

    二、原型聚类 - 图161

    其中 二、原型聚类 - 图162二、原型聚类 - 图163 维均值向量, 二、原型聚类 - 图164二、原型聚类 - 图165 的协方差矩阵。 二、原型聚类 - 图166 的概率密度函数由参数 二、原型聚类 - 图167 决定。

  3. 定义高斯混合分布: 二、原型聚类 - 图168 。该分布由 二、原型聚类 - 图169 个混合成分组成,每个混合成分对应一个高斯分布。其中:

    • 二、原型聚类 - 图170 是第 二、原型聚类 - 图171 个高斯混合成分的参数。
    • 二、原型聚类 - 图172 是相应的混合系数,满足 二、原型聚类 - 图173
  4. 假设训练集 二、原型聚类 - 图174 的生成过程是由高斯混合分布给出。

    令随机变量 二、原型聚类 - 图175 表示生成样本 二、原型聚类 - 图176 的高斯混合成分序号, 二、原型聚类 - 图177 的先验概率 二、原型聚类 - 图178

    生成样本的过程分为两步:

    • 首先根据概率分布 二、原型聚类 - 图179 生成随机变量 二、原型聚类 - 图180
    • 再根据 二、原型聚类 - 图181 的结果,比如 二、原型聚类 - 图182, 根据概率 二、原型聚类 - 图183 生成样本。
  5. 根据贝叶斯定理, 若已知输出为 二、原型聚类 - 图184,则 二、原型聚类 - 图185 的后验分布为:

    二、原型聚类 - 图186

    其物理意义为:所有导致输出为 二、原型聚类 - 图187 的情况中, 二、原型聚类 - 图188 发生的概率。

  6. 当高斯混合分布已知时,高斯混合聚类将样本集 二、原型聚类 - 图189 划分成 二、原型聚类 - 图190 个簇 二、原型聚类 - 图191

    对于每个样本 二、原型聚类 - 图192 ,给出它的簇标记 二、原型聚类 - 图193 为:

    二、原型聚类 - 图194

    即:如果 二、原型聚类 - 图195 最有可能是 二、原型聚类 - 图196 产生的,则将该样本划归到簇 二、原型聚类 - 图197

    这就是通过最大后验概率确定样本所属的聚类。

  7. 现在的问题是,如何学习高斯混合分布的参数。由于涉及到隐变量 二、原型聚类 - 图198 ,可以采用EM算法求解。

    具体求解参考EM 算法的章节部分。