聚类

  1. 在无监督学习(unsupervised learning)中,训练样本的标记信息是未知的。

  2. 无监督学习的目标:通过对无标记训练样本的学习来揭露数据的内在性质以及规律。

  3. 一个经典的无监督学习任务:寻找数据的最佳表达(representation)。常见的有:

    • 低维表达:试图将数据(位于高维空间)中的信息尽可能压缩在一个较低维空间中。
    • 稀疏表达:将数据嵌入到大多数项为零的一个表达中。该策略通常需要进行维度扩张。
    • 独立表达:使数据的各个特征相互独立。
  4. 无监督学习应用最广的是聚类(clustering)

    • 给定数据集 ,聚类试图将数据集中的样本划分为 个不相交的子集 ,每个子集称为一个簇cluster。其中:
    • 通过这样的划分,每个簇可能对应于一个潜在的概念。这些概念对于聚类算法而言,事先可能是未知的。
    • 聚类过程仅仅能自动形成簇结构,簇所对应的概念语义需要由使用者来提供。
  5. 通常用 表示样本 的簇标记cluster label,即 。于是数据集 的聚类结果可以用包含 个元素的簇标记向量 来表示。

  6. 聚类的作用:

    • 可以作为一个单独的过程,用于寻找数据内在的分布结构。
    • 也可以作为其他学习任务的前驱过程。如对数据先进行聚类,然后对每个簇单独训练模型。
  7. 聚类问题本身是病态的。即:没有某个标准来衡量聚类的效果。

    • 可以简单的度量聚类的性质,如每个聚类的元素到该类中心点的平均距离。

      但是实际上不知道这个平均距离对应于真实世界的物理意义。

    • 可能很多不同的聚类都很好地对应了现实世界的某些属性,它们都是合理的。

      如:在图片识别中包含的图片有:红色卡车、红色汽车、灰色卡车、灰色汽车。可以聚类成:红色一类、灰色一类;也可以聚类成:卡车一类、汽车一类。

      解决该问题的一个做法是:利用深度学习来进行分布式表达,可以对每个车辆赋予两个属性:一个表示颜色、一个表示型号。

一、性能度量

  1. 聚类的性能度量也称作聚类的有效性指标validity index

  2. 直观上看,希望同一簇的样本尽可能彼此相似,不同簇的样本之间尽可能不同。即:簇内相似度intra-cluster similarity高,且簇间相似度inter-cluster similarity低。

  3. 聚类的性能度量分两类:

    • 聚类结果与某个参考模型reference model进行比较,称作外部指标external index
    • 直接考察聚类结果而不利用任何参考模型,称作内部指标internal index

1.1 外部指标

  1. 对于数据集 ,假定通过聚类给出的簇划分为 。参考模型给出的簇划分为 ,其中 不一定相等 。

    分别表示 的簇标记向量。定义:

    其中 表示集合的元素的个数。各集合的意义为:

    • :包含了同时隶属于 的样本对。
    • :包含了隶属于 ,但是不隶属于 的样本对。
    • :包含了不隶属于 , 但是隶属于 的样本对。
    • :包含了既不隶属于 , 又不隶属于 的样本对。

    由于每个样本对 仅能出现在一个集合中,因此有

  2. 下述性能度量的结果都在 [0,1]之间。这些值越大,说明聚类的性能越好。

1.1.1 Jaccard系数

  1. Jaccard系数Jaccard Coefficient:JC

    它刻画了:所有的同类的样本对(要么在 中属于同类,要么在 中属于同类)中,同时隶属于 的样本对的比例。

1.1.2 FM指数

  1. FM指数Fowlkes and Mallows Index:FMI

    它刻画的是:

    • 中同类的样本对中,同时隶属于 的样本对的比例为
    • 中同类的样本对中,同时隶属于 的样本对的比例为
    • FMI就是 的几何平均。

1.1.3 Rand指数

  1. Rand指数Rand Index:RI

    它刻画的是:

    • 同时隶属于 的同类样本对(这种样本对属于同一个簇的概率最大)与既不隶属于 、 又不隶属于 的非同类样本对(这种样本对不是同一个簇的概率最大)之和,占所有样本对的比例。
    • 这个比例其实就是聚类的可靠程度的度量。

1.1.4 ARI指数

  1. 使用RI有个问题:对于随机聚类,RI指数不保证接近0(可能还很大)。

    ARI指数就通过利用随机聚类来解决这个问题。

  2. 定义一致性矩阵为:

    其中:

    • 为属于簇 的样本的数量, 为属于簇 的样本的数量。
    • 为同时属于簇 和簇 的样本的数量。

    则根据定义有: ,其中 表示组合数。数字2 是因为需要提取两个样本组成样本对。

  3. 定义ARI指数Adjusted Rand Index:

    其中:

    • :表示同时隶属于 的样本对。

    • :表示最大的样本对。

      即:无论如何聚类,同时隶属于 的样本对不会超过该数值。

    • :表示在随机划分的情况下,同时隶属于 的样本对的期望。

      • 随机挑选一对样本,一共有 种情形。
      • 这对样本隶属于 中的同一个簇,一共有 种可能。
      • 这对样本隶属于 中的同一个簇,一共有 种可能。
      • 这对样本隶属于 中的同一个簇、且属于 中的同一个簇,一共有 种可能。
      • 则在随机划分的情况下,同时隶属于 的样本对的期望(平均样本对)为:

1.2 内部指标

  1. 对于数据集 ,假定通过聚类给出的簇划分为

    定义:

    其中: 表示两点 之间的距离; 表示簇 的中心点, 表示簇 的中心点, 表示簇 的中心点之间的距离。

    上述定义的意义为:

    • : 簇 中每对样本之间的平均距离。
    • :簇 中距离最远的两个点的距离。
    • :簇 之间最近的距离。
    • :簇 中心点之间的距离。

1.2.1 DB指数

  1. DB指数Davies-Bouldin Index:DBI

    其物理意义为:

    • 给定两个簇,每个簇样本距离均值之和比上两个簇的中心点之间的距离作为度量。

      该度量越小越好。

    • 给定一个簇 ,遍历其它的簇,寻找该度量的最大值。

    • 对所有的簇,取其最大度量的均值。

  2. 显然 越小越好。

    • 如果每个簇样本距离均值越小(即簇内样本距离都很近),则 越小。
    • 如果簇间中心点的距离越大(即簇间样本距离相互都很远),则 越小。

1.2.2 Dunn指数

  1. Dunn指数Dunn Index:DI

    其物理意义为:任意两个簇之间最近的距离的最小值,除以任意一个簇内距离最远的两个点的距离的最大值。

  2. 显然 越大越好。

    • 如果任意两个簇之间最近的距离的最小值越大(即簇间样本距离相互都很远),则 越大。
    • 如果任意一个簇内距离最远的两个点的距离的最大值越小(即簇内样本距离都很近),则 越大。

1.3 距离度量

  1. 距离函数 常用的有以下距离:

    • 闵可夫斯基距离Minkowski distance

      给定样本 ,则闵可夫斯基距离定义为:

      • 时,闵可夫斯基距离就是欧式距离Euclidean distance

      • 时,闵可夫斯基距离就是曼哈顿距离Manhattan distance

    • VDM距离Value Difference Metric

      考虑非数值类属性(如属性取值为:中国,印度,美国,英国),令 表示 的样本数; 表示 且位于簇 中的样本的数量。则在属性 上的两个取值 之间的 VDM距离为:

      该距离刻画的是:属性取值在各簇上的频率分布之间的差异。

  2. 当样本的属性为数值属性与非数值属性混合时,可以将闵可夫斯基距离与 VDM 距离混合使用。

    假设属性 为数值属性, 属性 为非数值属性。则:

  3. 当样本空间中不同属性的重要性不同时,可以采用加权距离。

    以加权闵可夫斯基距离为例:

  4. 这里的距离函数都是事先定义好的。在有些实际任务中,有必要基于数据样本来确定合适的距离函数。这可以通过距离度量学习distance metric learning来实现。

  5. 这里的距离度量满足三角不等式:

    在某些任务中,根据数据的特点可能需要放松这一性质。如:美人鱼距离很近,美人鱼距离很近,但是的距离很远。这样的距离称作非度量距离non-metric distance

二、原型聚类

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

    常用的原型聚类有:

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

2.1 k-means 算法

2.1.1 k-means

  1. 给定样本集 , 假设一个划分为

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

    其中 是簇 的均值向量。

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

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

    • 然后根据假设的均值向量给出了 的一个划分。

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

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

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

  4. k-means 算法:

    • 输入:

      • 样本集
      • 聚类簇数
    • 输出:簇划分

    • 算法步骤:

      • 中随机选择 个样本作为初始均值向量

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

        • 初始化阶段:取

        • 划分阶段:令

          • 计算 的簇标记:

            即:将 离哪个簇的均值向量最近,则该样本就标记为那个簇。

          • 然后将样本 划入相应的簇:

        • 重计算阶段:计算

        • 终止条件判断:

          • 如果对所有的 ,都有 ,则算法收敛,终止迭代。
          • 否则重赋值
  5. k-means 优点:

    • 计算复杂度低,为 ,其中 为迭代次数。

      通常 要远远小于 ,此时复杂度相当于

    • 思想简单,容易实现。

  6. k-means 缺点:

    • 需要首先确定聚类的数量

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

      通常进行多次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++ 算法:

    • 输入:

      • 样本集
      • 聚类簇数
    • 输出:簇划分

    • 算法步骤:

      • 中随机选择1个样本作为初始均值向量组

      • 迭代,直到初始均值向量组有 个向量。

        假设初始均值向量组为 。迭代过程如下:

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

2.1.3 k-modes

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

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

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

      其中 为示性函数。

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

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

      其中 的取值空间为所有样本在第 个属性上的取值。

2.1.4 k-medoids

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

  2. k-medoids 算法:

    • 输入:

      • 样本集
      • 聚类簇数
    • 输出:簇划分

    • 算法步骤:

      • 中随机选择 个样本作为初始均值向量

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

        • 初始化阶段:取

          遍历每个样本 ,计算它的簇标记: 。即:将 离哪个簇的均值向量最近,则该样本就标记为那个簇。

          然后将样本 划入相应的簇:

        • 重计算阶段:

          遍历每个簇

          • 计算簇心 距离簇内其它点的距离

          • 计算簇 内每个点 距离簇内其它点的距离

            如果 ,则重新设置簇中心:

        • 终止条件判断:遍历一轮簇 之后,簇心保持不变。

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

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

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

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 算法:

    • 输入:

      • 样本集
      • 聚类簇数
    • 输出:簇划分

    • 算法步骤:

      • 中随机选择 个样本作为初始均值向量

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

        • 初始化阶段:取

        • 划分阶段:随机挑选一个Batch 的样本集合 ,其中 为批大小。

          • 计算 的簇标记:

            即:将 离哪个簇的均值向量最近,则该样本就标记为那个簇。

          • 然后将样本 划入相应的簇:

        • 重计算阶段:计算

        • 终止条件判断:

          • 如果对所有的 ,都有 ,则算法收敛,终止迭代。
          • 否则重赋值

2.2 学习向量量化

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

  2. 给定样本集 LVQ的目标是从特征空间中挑选一组样本作为原型向量

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

    • 对任意样本 ,它被划入与距离最近的原型向量所代表的簇中。

    • 对于每个原型向量 ,它定义了一个与之相关的一个区域 ,该区域中每个样本与 的距离都不大于它与其他原型向量 的距离。

    • 区域 对样本空间 形成了一个簇划分,该划分通常称作 Voronoi剖分。

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

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

    • 然后对于训练集中的每一个样本 , 找出假设的原型向量中,距离该样本最近的原型向量

      • 如果 的标记与 的标记相同,则更新 ,将该原型向量更靠近
      • 如果 的标记与 的标记不相同,则更新 ,将该原型向量更远离
    • 不停进行这种更新,直到迭代停止条件(如以到达最大迭代次数,或者原型向量的更新幅度很小)。

  5. LVQ算法:

    • 输入:

      • 样本集
      • 原型向量个数
      • 各原型向量预设的类别标记
      • 学习率
    • 输出:原型向量

    • 算法步骤:

      • 依次随机从类别 中挑选一个样本,初始化一组原型向量

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

        • 从样本集 中随机选取样本 ,挑选出距离 最近的原型向量
        • 如果 的类别等于 ,则:
        • 如果 的类别不等于 ,则:
  6. 在原型向量的更新过程中:

    • 如果 的类别等于 ,则更新后, 距离为:

      则更新后的原型向量 距离 更近。

    • 如果 的类别不等于 ,则更新后, 距离为:

      则更新后的原型向量 距离 更远。

  7. 这里有一个隐含假设:即计算得到的样本 (该样本可能不在样本集中) 的标记就是更新之前 的标记。

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

2.3 高斯混合聚类

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

  2. 对于 维样本空间 中的随机向量 ,若 服从高斯分布,则其概率密度函数为 :

    其中 维均值向量, 的协方差矩阵。 的概率密度函数由参数 决定。

  3. 定义高斯混合分布: 。该分布由 个混合成分组成,每个混合成分对应一个高斯分布。其中:

    • 是第 个高斯混合成分的参数。
    • 是相应的混合系数,满足
  4. 假设训练集 的生成过程是由高斯混合分布给出。

    令随机变量 表示生成样本 的高斯混合成分序号, 的先验概率

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

    • 首先根据概率分布 生成随机变量
    • 再根据 的结果,比如 , 根据概率 生成样本。
  5. 根据贝叶斯定理, 若已知输出为 ,则 的后验分布为:

    其物理意义为:所有导致输出为 的情况中, 发生的概率。

  6. 当高斯混合分布已知时,高斯混合聚类将样本集 划分成 个簇

    对于每个样本 ,给出它的簇标记 为:

    即:如果 最有可能是 产生的,则将该样本划归到簇

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

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

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

三、密度聚类

  1. 密度聚类density-based clustering假设聚类结构能够通过样本分布的紧密程度确定。
  2. 密度聚类算法从样本的密度的角度来考察样本之间的可连接性,并基于可连接样本的不断扩张聚类簇,从而获得最终的聚类结果。

3.1 DBSCAN 算法

  1. DBSCAN是一种著名的密度聚类算法,它基于一组邻域参数 来刻画样本分布的紧密程度。

  2. 给定数据集 , 定义:

    • -邻域:

      即: 包含了样本集 中与 距离不大于 的所有的样本。

    • 核心对象core object:若 ,则称 是一个核心对象。

      即:若 -邻域中至少包含 个样本,则 是一个核心对象。

    • 密度直达directyl density-reachable:若 是一个核心对象,且 , 则称 密度直达,记作

    • 密度可达density-reachable:对于 , 若存在样本序列 , 其中 ,如果 密度直达,则称 密度可达,记作

    • 密度相连density-connected:对于 ,若存在 ,使得 均由 密度可达,则称 密度相连 ,记作

  3. DBSCAN算法的簇定义:给定邻域参数 , 一个簇 是满足下列性质的非空样本子集:

    • 连接性 connectivity: 若 ,则
    • 最大性maximality:若 ,且 , 则

    即一个簇是由密度可达关系导出的最大的密度相连样本集合。

  4. DBSCAN算法的思想:若 为核心对象,则 密度可达的所有样本组成的集合记作 。可以证明 : 就是满足连接性与最大性的簇。

    于是 DBSCAN算法首先任选数据集中的一个核心对象作为种子seed,再由此出发确定相应的聚类簇。

  5. DBSCAN算法:

    • 输入:

      • 数据集
      • 邻域参数
    • 输出: 簇划分

    • 算法步骤:

      • 初始化核心对象集合为空集:

      • 寻找核心对象:

        • 遍历所有的样本点 , 计算
        • 如果 ,则
      • 迭代:以任一未访问过的核心对象为出发点,找出有其密度可达的样本生成的聚类簇,直到所有核心对象都被访问为止。

  6. 注意:

    • 若在核心对象 的寻找密度可达的样本的过程中,发现核心对象 是由 密度可达的,且 尚未被访问,则将 加入 所属的簇,并且标记 为已访问。
    • 对于 中的样本点,它只可能属于某一个聚类簇。因此在核心对象 的寻找密度可达的样本的过程中,它只能在标记为未访问的样本中寻找 (标记为已访问的样本已经属于某个聚类簇了)。
  7. DBSCAN 算法的优点:

    • 簇的数量由算法自动确定,无需人工指定。
    • 基于密度定义,能够对抗噪音。
    • 可以处理任意形状和大小的簇。
  8. DBSCAN 算法的缺点:

    • 若样本集的密度不均匀,聚类间距差相差很大时,聚类质量较差。因为此时参数 的选择比较困难。
    • 无法应用于密度不断变化的数据集中。

3.2 Mean-Shift 算法

  1. Mean-Shift 是基于核密度估计的爬山算法,可以用于聚类、图像分割、跟踪等领域。

  2. 给定 维空间的 个样本组成的数据集 ,给定一个中心为 、半径为 的球形区域 (称作兴趣域),定义其mean shift 向量为:

  3. Mean-Shift 算法的基本思路是:

    • 首先任选一个点作为聚类的中心来构造兴趣域

    • 然后计算当前的mean shift 向量,兴趣域的中心移动为:

      移动过程中,兴趣域范围内的所有样本都标记为同一个簇。

    • 如果mean shift 向量为 0 ,则停止移动,说明兴趣域 已到达数据点最密集的区域。

    因此Mean-Shift 会向着密度最大的区域移动。

    下图中:蓝色为当前的兴趣域,红色为当前的中心点 ;紫色向量为mean shift 向量 ,灰色为移动之后的兴趣域

    mean_shift

  4. 在计算mean shift 向量的过程中假设每个样本的作用都是相等的。实际上随着样本与中心点的距离不同,样本对于mean shift 向量的贡献不同。

    定义高斯核函数为: ,则重新mean shift 向量定义为:

    其中 称做带宽。 刻画了样本 距离中心点 相对于半径 的相对距离。

  5. Mean_Shift 算法:

    • 输入:

      • 数据集
      • 带宽参数
      • 迭代阈值 ,簇阈值
    • 输出: 簇划分

    • 算法步骤:

      迭代,直到所有的样本都被访问过。迭代过程为(设已有的簇为 ):

      • 在未访问过的样本中随机选择一个点作为中心点 ,找出距它半径为 兴趣域,记做

        中的样本的簇标记设置为 ( 一个新的簇)。

      • 计算当前的mean shift 向量,兴趣域中心的移动为:

        在移动过程中,兴趣域内的所有点标记为访问过,并且将它们的簇标记设置为

      • 如果 ,则本次结束本次迭代。

      • 设已有簇中,簇 的中心点 距离最近,如果 ,则将当前簇和簇 合并。

        合并时,当前簇中的样本的簇标记重新修改为

      当所有的样本都被访问过时,重新分配样本的簇标记(因为可能有的样本被多个簇标记过):若样本被多个簇标记过,则选择最大的那个簇作为该样本的簇标记。即:尽可能保留大的簇。

  6. 可以证明:Mean_Shift 算法每次移动都是向着概率密度函数增加的方向移动。

    维欧式空间中,对空间中的点 的概率密度估计为:

    其中:

    • 表示空间中的核函数, 为带宽矩阵。
    • 通常 采用放射状对称核函数 的轮廓函数, (一个正数)为标准化常数从而保证 的积分为 1 。
    • 通常带宽矩阵采用 为带宽参数。

    因此有: 。则有梯度:

    的导数为 。取 为新的轮廓函数, (一个正数)为新的标准化常数,

    则有:

    定义 ,则它表示基于核函数 的概率密度估计,始终为非负数。

    根据前面定义:,则有:

    因此 正比于 ,因此mean shift 向量的方向始终指向概率密度增加最大的方向。

    上式计算 时需要考虑所有的样本,计算复杂度太大。作为一个替代,可以考虑使用 距离 内的样本,即兴趣域 内的样本。即可得到:

  7. Mean-Shift 算法优点:

    • 簇的数量由算法自动确定,无需人工指定。
    • 基于密度定义,能够对抗噪音。
    • 可以处理任意形状和大小的簇。
    • 没有局部极小值点,因此当给定带宽参数 时,其聚类结果就是唯一的。
  8. Mean_Shift 算法缺点:

    • 无法控制簇的数量。
    • 无法区分有意义的簇和无意义的簇。如:在Mean_Shift 算法中,异常点也会形成它们自己的簇。

四、层次聚类

  1. 层次聚类hierarchical clustering 试图在不同层次上对数据集进行划分,从而形成树形的聚类结构。

4.1 AGNES 算法

  1. AGglomerative NESting:AGNES是一种常用的采用自底向上聚合策略的层次聚类算法。

  2. AGNES首先将数据集中的每个样本看作一个初始的聚类簇,然后在算法运行的每一步中,找出距离最近的两个聚类簇进行合并。

    合并过程不断重复,直到达到预设的聚类簇的个数。

  3. 这里的关键在于:如何计算聚类簇之间的距离?

    由于每个簇就是一个集合,因此只需要采用关于集合的某个距离即可。给定聚类簇 , 有三种距离:

    • 最小距离 :

      最小距离由两个簇的最近样本决定。

    • 最大距离 :

      最大距离由两个簇的最远样本决定。

    • 平均距离:

      平均距离由两个簇的所有样本决定。

  4. AGNES 算法可以采取上述任意一种距离:

    • AGNES算法的聚类簇距离采用 时,称作单链接single-linkage算法。
    • AGNES算法的聚类簇距离采用 时,称作全链接complete-linkage算法。
    • AGNES算法的聚类簇距离采用 时,称作均链接average-linkage算法 。
  5. AGNES算法:

    • 输入:

      • 数据集
      • 聚类簇距离度量函数
      • 聚类簇数量
    • 输出:簇划分

    • 算法步骤:

      • 初始化:将每个样本都作为一个簇

      • 迭代,终止条件为聚类簇的数量为 。迭代过程为:

        计算聚类簇之间的距离,找出距离最近的两个簇,将这两个簇合并。

        每进行一次迭代,聚类簇的数量就减少一些。

  6. AGNES 算法的优点:

    • 距离容易定义,使用限制较少。
    • 可以发现聚类的层次关系。
  7. AGNES 算法的缺点:

    • 计算复杂度较高。
    • 算法容易聚成链状。

4.2 BIRCH 算法

  1. BIRCH:Balanced Iterative Reducing and Clustering Using Hierarchies 算法通过聚类特征树CF Tree:Clustering Feature True来执行层次聚类,适合于样本量较大、聚类类别数较大的场景。

4.2.1 聚类特征

  1. 聚类特征CF:每个CF 都是刻画一个簇的特征的三元组: 。其中:

    • :表示簇内样本数量的数量。
    • :表示簇内样本的线性求和: ,其中 为该CF 对应的簇。
    • :表示簇内样本的长度的平方和。 ,其中 为该CF 对应的簇。
  2. 根据CF 的定义可知:如果CF1CF2 分别表示两个不相交的簇的特征,如果将这两个簇合并成一个大簇,则大簇的特征为:

    即:CF 满足可加性。

  3. 给定聚类特征CF,则可以统计出簇的一些统计量:

    • 簇心:
    • 簇内数据点到簇心的平均距离(也称作簇的半径):
    • 簇内两两数据点之间的平均距离(也称作簇的直径):
  4. 给定两个不相交的簇,其特征分别为

    假设合并之后的簇为 ,其中

    可以通过下列的距离来度量 CF1CF2 的相异性:

    • 簇心欧氏距离centroid Euclidian distance,其中 分别为各自的簇心。

    • 簇心曼哈顿距离centroid Manhattan distance

    • 簇连通平均距离average inter-cluster distance

    • 全连通平均距离average intra-cluster distance

    • 方差恶化距离variance incress distance

4.2.2 CF 树

  1. CF树的结构类似于平衡B+树 。树由三种结点构成:根结点、中间结点、叶结点。

    • 根结点、中间结点:由若干个聚类特征CF ,以及这些CF 指向子结点的指针组成。

    • 叶结点:由若干个聚类特征CF 组成。

      • 叶结点没有子结点,因此CF 没有指向子结点的指针。
      • 所有的叶结点通过双向链表连接起来。
      • BIRCH 算法结束时,叶结点的每个CF 对应的样本集就对应了一个簇。

    CF_Tree

  2. CF 树有三个关键参数:

    • 枝平衡因子 :非叶结点中,最多不能包含超过 CF
    • 叶平衡因子 :叶结点中,最多不能包含超过 CF
    • 空间阈值 :叶结点中,每个CF 对应的子簇的大小(通过簇半径 来描述)不能超过
  3. 由于CF 的可加性,所以CF 树中,每个父结点的CF 等于它所有子结点的所有CF 之和。

  4. CF 树的生成算法:

    • 输入:

      • 样本集
      • 枝平衡因子
      • 叶平衡因子
      • 空间阈值
    • 输出:CF

    • 算法步骤:

      • 初始化:CF 树的根结点为空。

      • 随机从样本集 中选出一个样本,放入一个新的CF 中,并将该CF 放入到根结点中。

      • 遍历 中的样本,并向CF 树中插入。迭代停止条件为:样本集 中所有样本都插入到CF 树中。

        迭代过程如下:

        • 随机从样本集 中选出一个样本 ,从根结点向下寻找与 距离最近的叶结点 ,和 里与 最近的

        • 如果 加入到 对应的簇中之后,该簇的簇半径 ,则将 加入到 对应的簇中,并更新路径上的所有CF 。本次插入结束。

        • 否则,创建一个新的CF,将 放入该CF 中,并将该CF 添加到叶结点 中。

          如果 CF 数量小于 ,则更新路径上的所有CF 。本次插入结束。

        • 否则,将叶结点 分裂为两个新的叶结点 。分裂方式为:

          • 选择叶结点 中距离最远的两个CF,分别作为 中的首个CF
          • 将叶结点 中剩下的CF 按照距离这两个CF 的远近,分别放置到 中。
        • 依次向上检查父结点是否也需要分裂。如果需要,则按照和叶子结点分裂方式相同。

4.2.3 BIRCH 算法

  1. BIRCH 算法的主要步骤是建立CF 树,除此之外还涉及到CF 树的瘦身、离群点的处理。

  2. BIRCH 需要对CF 树瘦身,有两个原因:

    • 将数据点插入到CF 树的过程中,用于存储CF 树结点及其相关信息的内存有限,导致部分数据点生长形成的CF 树占满了内存。因此需要对CF 树瘦身,从而使得剩下的数据点也能插入到CF 树中。
    • CF 树生长完毕后,如果叶结点中的CF 对应的簇太小,则会影响后续聚类的速度和质量。
  3. BIRCH 瘦身是在将 增加的过程。算法会在内存中同时存放旧树 和新树 ,初始时刻 为空。

    • 算法同时处理 ,将 中的 CF 迁移到 中。
    • 在完成所有的CF 迁移之后, 为空, 就是瘦身后的 CF 树。
  4. BIRCH 离群点的处理:

    • 在对CF 瘦身之后,搜索所有叶结点中的所有子簇,寻找那些稀疏子簇,并将稀疏子簇放入待定区。

      稀疏子簇:簇内数据点的数量远远少于所有子簇的平均数据点的那些子簇。

      将稀疏子簇放入待定区时,需要同步更新CF 树上相关路径及结点。

    • 中所有数据点都被插入之后,扫描待定区中的所有数据点(这些数据点就是候选的离群点),并尝试将其插入到CF 树中。

      如果数据点无法插入到CF 树中,则可以确定为真正的离群点。

  5. BIRCH 算法:

    • 输入:

      • 样本集
      • 枝平衡因子
      • 叶平衡因子
      • 空间阈值
    • 输出:CF

    • 算法步骤:

      • 建立 CF 树。

      • (可选)对CF 树瘦身、去除离群点,以及合并距离非常近的CF

      • (可选)利用其它的一些聚类算法(如:k-means)对CF树的所有叶结点中的CF 进行聚类,得到新的CF 树。

        这是为了消除由于样本读入顺序不同导致产生不合理的树结构。

        这一步是对 CF 结构进行聚类。由于每个CF 对应一组样本,因此对CF 聚类就是对 进行聚类。

      • (可选)将上一步得到的、新的CF 树的叶结点中每个簇的中心点作为簇心,对所有样本按照它距这些中心点的距离远近进行聚类。

        这是对上一步的结果进行精修。

  6. BIRCH 算法优点:

    • 节省内存。所有样本都存放在磁盘上,内存中仅仅存放CF 结构。
    • 计算速度快。只需要扫描一遍就可以建立CF 树。
    • 可以识别噪声点。
  7. BIRCH 算法缺点:

    • 结果依赖于数据点的插入顺序。原本属于同一个簇的两个点可能由于插入顺序相差很远,从而导致分配到不同的簇中。

      甚至同一个点在不同时刻插入,也会被分配到不同的簇中。

    • 对非球状的簇聚类效果不好。这是因为簇直径 和簇间距离的计算方法导致。

    • 每个结点只能包含规定数目的子结点,最后聚类的簇可能和真实的簇差距很大。

  8. BIRCH 可以不用指定聚类的类别数

    • 如果不指定 ,则最终叶结点中CF 的数量就是
    • 如果指定 ,则需要将叶结点按照距离远近进行合并,直到叶结点中CF 数量等于

五、谱聚类

  1. 谱聚类spectral clustering 是一种基于图论的聚类方法。

  2. 谱聚类的主要思想是:基于数据集 来构建图 ,其中:

    • 顶点 :由数据集中的数据点组成:

    • :任意一对顶点之间存在边。

      距离越近的一对顶点,边的权重越高;距离越远的一对顶点,边的权重越低。

    通过对图 进行切割,使得切割之后:不同子图之间的边的权重尽可能的低、各子图内的边的权重尽可能的高。这样就完成了聚类。

    spectral_cluster

5.1 邻接矩阵

  1. 在图 中,定义权重 为顶点 之间的权重,其中

    定义 为邻接矩阵:

    由于 为无向图,因此 。即:

    • 对图中顶点 ,定义它的度 为:所有与顶点 相连的边的权重之和:

      定义度矩阵 为一个对角矩阵,其中对角线分别为各顶点的度:

    • 对于顶点集合 的一个子集 ,定义 为子集 中点的个数;定义 ,为子集 中所有点的度之和。

  2. 事实上在谱聚类中,通常只给定数据集 ,因此需要计算出邻接矩阵

    • 基本思想是:距离较近的一对点(即相似都较高),边的权重较高;距离较远的一对点(即相似度较低),边的权重较低。

    • 基本方法是:首先构建相似度矩阵 ,然后使用 -近邻法、 近邻法、或者全连接法。

      • 通常相似度采用高斯核: 。此时有 。即:
      • 也可以选择不同的核函数,如:多项式核函数、高斯核函数、sigmoid 核函数。
  3. -近邻法:设置一个距离阈值 ,定义邻接矩阵 为:

    即:一对相似度小于 的点,边的权重为 ;否则边的权重为 0 。

    -近邻法得到的权重要么是 0 ,要么是 ,权重度量很不精确,因此实际应用较少。

  4. 近邻法:利用 KNN 算法选择每个样本最近的 个点作为近邻,其它点与当前点之间的边的权重为 0 。

    这种做法会导致邻接矩阵 非对称,因为当 近邻时, 不一定是 近邻。

    为了解决对称性问题,有两种做法:

    • 只要一个点在另一个点的 近邻中,则认为是近邻。即:取并集。

    • 只有两个点互为对方的 近邻中,则认为是近邻。即:取交集。

  5. 全连接法:所有点之间的权重都大于 0 :

5.2 拉普拉斯矩阵

  1. 定义拉普拉斯矩阵 ,其中 为度矩阵、 为邻接矩阵。

  2. 拉普拉斯矩阵 的性质:

    • 是对称矩阵,即 。这是因为 都是对称矩阵。

    • 因为 是实对称矩阵,因此它的特征值都是实数。

    • 对任意向量 ,有:

    • 是半正定的,且对应的 个特征值都大于等于0,且最小的特征值为 0。

      设其 个实特征值从小到大为 ,即:

5.3 谱聚类算法

  1. 给定无向图 ,设子图的点的集合 和子图的点的集合 都是 的子集,且

    定义 之间的切图权重为:

    即:所有连接 之间的边的权重。

  2. 对于无向图 ,假设将它切分为 个子图:每个子图的点的集合为 ,满足

    定义切图cut 为: ,其中 的补集。

5.3.1 最小切图

  1. 引入指示向量 ,定义:

    则有:

    因此 。其中 为矩阵的迹。

    考虑到顶点 有且仅位于一个子图中,则有约束条件:

  2. 最小切图算法: 最小的切分。即求解:

  3. 最小切图切分使得不同子图之间的边的权重尽可能的低,但是容易产生分割出只包含几个顶点的较小子图的歪斜分割现象。

    spectral_cluster

5.3.2 RatioCut 算法

  1. RatioCut 切图不仅考虑最小化 ,它还考虑最大化每个子图的点的个数。即:

    • 最小化 :使得不同子图之间的边的权重尽可能的低。
    • 最大化每个子图的点的个数:使得各子图尽可能的大。
  2. 引入指示向量 ,定义:

    则有:

    因此 。其中 为矩阵的迹。

    考虑到顶点 有且仅位于一个子图中,则有约束条件:

  3. RatioCut算法: 最小的切分。即求解:

    因此只需要求解 最小的 个特征值,求得对应的 个特征向量组成

    通常在求解得到 之后,还需要对行进行标准化:

  4. 事实上这样解得的 不能完全满足指示向量的定义。因此在得到 之后,还需要对每一行进行一次传统的聚类(如:k-means 聚类)。

  5. RatioCut 算法:

    • 输入:

      • 数据集
      • 降维的维度
      • 二次聚类算法
      • 二次聚类的维度
    • 输出:聚类簇

    • 算法步骤:

      • 根据 构建相似度矩阵

      • 根据相似度矩阵构建邻接矩阵 、度矩阵 ,计算拉普拉斯矩阵

      • 计算 最小的 个特征值,以及对应的特征向量 ,构建矩阵

      • 按照行进行标准化: ,得到

      • 中每一行作为一个 维的样本,一共 个样本,利用二次聚类算法来聚类,二次聚类的维度为

        最终得到簇划分

5.3.3 Ncut 算法

  1. Ncut 切图不仅考虑最小化 ,它还考虑最大化每个子图的边的权重。即:

    • 最小化 :使得不同子图之间的边的权重尽可能的低。
    • 最大化每个子图的边的权重:使得各子图内的边的权重尽可能的高。
  2. 引入指示向量 ,定义:

    则有:

    因此 。其中 为矩阵的迹。

    考虑到顶点 有且仅位于一个子图中,则有约束条件:

  3. Ncut算法: 最小的切分。即求解

  4. ,则有:

    ,则最优化目标变成:

    因此只需要求解 最小的 个特征值,求得对应的 个特征向量组成 。然后对行进行标准化:

    RatioCut 类似,Ncut 也需要对 的每一行进行一次传统的聚类(如:k-means 聚类)。

  5. 事实上 相当于对拉普拉斯矩阵 进行了一次标准化:

  6. Ncut 算法:

    • 输入:

      • 数据集
      • 降维的维度
      • 二次聚类算法
      • 二次聚类的维度
    • 输出:聚类簇

    • 算法步骤:

      • 根据 构建相似度矩阵

      • 根据相似度矩阵构建邻接矩阵 、度矩阵 ,计算拉普拉斯矩阵

      • 构建标准化之后的拉普拉斯矩阵

      • 计算 最小的 个特征值,以及对应的特征向量 ,构建矩阵

      • 按照行进行标准化: ,得到

      • 中每一行作为一个 维的样本,一共 个样本,利用二次聚类算法来聚类,二次聚类的维度为

        最终得到簇划分

5.4 性质

  1. 谱聚类算法优点:

    • 只需要数据之间的相似度矩阵,因此处理稀疏数据时很有效。
    • 由于使用了降维,因此在处理高维数据聚类时效果较好。
  2. 谱聚类算法缺点:

    • 如果最终聚类的维度非常高,则由于降维的幅度不够,则谱聚类的运行速度和最后聚类的效果均不好。
    • 聚类效果依赖于相似度矩阵,不同相似度矩阵得到的最终聚类效果可能不同。