22、聚类算法:原理、方法与评估

聚类算法:原理、方法与评估

聚类是数据挖掘中的重要技术,旨在发现数据中的有趣结构。本文将介绍几种聚类方法及其评估指标。

聚类方法
1. 分裂层次聚类

分裂层次聚类以自顶向下的方式构建层次结构。所有文档最初都在一个簇中,然后递归地将簇划分为更小的簇,直到每个文档都在单独的簇中。

步骤如下
1. 将所有 $n$ 个待聚类的文档放入一个簇中。
2. 使用扁平方法将该簇划分为 $m$ 个簇。
3. 对新创建的簇递归地应用步骤 2,直到每个文档都在单独的簇中。

终止条件
- 找到 $k$ 个簇。
- 达到最大层次深度。
- 簇中剩余的文档数量达到最小值。
- 簇内达到最小期望的同质性(相异性)。

分裂簇的方法
- 最简单的方法是划分较大的簇,但当存在自然大簇时不适用。
- 选择一个当前簇进行分裂,使选定的准则函数值得到最大改善,通常选择方差最大的簇。

示例:二分 k - 均值算法
该算法使用基本的 k - 均值算法将一个簇划分为两个簇,然后选择对象数量较多或方差最大的簇再次分裂,重复此过程直到达到所需的簇数量或创建完整的层次结构。在文本挖掘领域,二分 k - 均值算法通常比直接的 k - 均值算法更适合处理大量簇。

graph TD
    A[所有文档在一个簇] --> B[使用扁平方法划分簇]
    B --> C{是否满足终止条件}
    C -- 否 --> D[对新簇递归划分]
    D --> B
    C -- 是 --> E[聚类结束]
2. 约束聚类
  • 基于扁平聚类约束的凝聚聚类 :凝聚层次聚类是局部的,可能无法考虑整个数据集的属性。为解决此问题,可以使用扁平聚类施加约束,将整个集合划分为 $k$ 个约束簇,聚类仅在这些簇内进行,不同约束簇的文档或簇不能合并。这种方法结合了扁平方法的全局视图和凝聚方法的局部视图,还降低了凝聚算法的时间复杂度。
  • 引入外部知识的 COP - K - 均值算法 :在无监督聚类过程中,可以引入外部知识,如必须链接(对象必须在同一簇的信息)和不能链接(对象不能在同一簇的信息)。COP - K - 均值算法修改了传统 k - 均值算法的步骤:
    1. 初始选择 $K$ 个文档作为簇中心 $c_1, c_2, \cdots, c_k$。
    2. 对于每个文档 $d_i \in D$,找到不违反任何约束的最近中心 $c_j$,将文档分配给相应的簇 $C_j$。如果找不到满足约束的簇,过程失败。
    3. 根据当前文档在簇中的分配,重新计算簇中心。
    4. 如果未满足停止条件,返回步骤 2,否则找到聚类解决方案。
聚类结果评估

聚类评估旨在比较不同的聚类实验和结果,理想的评估指标应是简单的数值度量,不偏向特定的簇数量、大小和相似性度量,易于解释,可用于单个簇和整个聚类解决方案。

1. 内部和外部评估指标
  • 内部评估指标 :仅基于数据中包含的信息评估聚类,通常依赖于数据的表示(特征选择),不同表示之间无法比较。内部指标可以提供有关生成簇内部相似性(凝聚性)、与其他簇的区别(分离性)或两者的信息。
  • 外部评估指标 :使用某种外部知识,如已知类的存在(真实标签)或人类专家的相关性判断。
2. 具体评估指标
评估指标 公式 说明
Rand 统计量 $Rand Statistic = \frac{SS + DD}{SS + SD + DS + DD}$ $SS$ 表示对象在聚类 $C$ 和分区 $P$ 中都属于同一簇,$SD$ 表示在 $C$ 中属于同一簇但在 $P$ 中属于不同簇,$DS$ 表示在 $C$ 中属于不同簇但在 $P$ 中属于同一簇,$DD$ 表示在 $C$ 和 $P$ 中都属于不同簇。高值表示聚类 $C$ 和分区 $P$ 匹配良好。
Jaccard 系数 $Jaccard Coefficient = \frac{SS}{SS + SD + DS}$ 衡量聚类结果与真实分区的相似性。
Folkes 和 Mallows 指数 $Folkes and Mallows Index = \sqrt{\frac{SS}{SS + SD} \cdot \frac{SS}{SS + DS}}$ 也是用于评估聚类与真实分区的匹配程度。
纯度 $Purity(C_i) = \max_{j \in L} \frac{l_{ij}}{\vert C_i \vert}$,$Purity = \sum_{i = 1}^{k} \frac{\vert C_i \vert}{n} Purity(C_i)$ $L$ 是类的集合,$l_{ij}$ 是簇 $C_i$ 中属于类 $j$ 的文档数量,$\vert C_i \vert$ 是簇 $C_i$ 中的文档数量。当簇只包含一个类的实例时,纯度为 1。
$p_{ij} = \frac{l_{ij}}{\vert C_i \vert}$,$Entropy(C_i) = \sum_{j \in L} p_{ij} \log p_{ij}$,$Entropy = \sum_{i = 1}^{k} \frac{\vert C_i \vert Entropy(C_i)}{n}$ 熵衡量簇中包含一个类的文档的程度,熵值越低,簇的质量越好。
F - 度量 $Precision(i, j) = \frac{l_{ij}}{\vert C_i \vert}$,$Recall(i, j) = \frac{l_{ij}}{l_j}$,$F(i, j) = \frac{2 Precision(i, j) Recall(i, j)}{Precision(i, j) + Recall(i, j)}$,$F = \sum_{j = 1}^{l} \frac{l_j}{n} \max_{i = 1..k} F(i, j)$ 结合了精度和召回率,值接近 1 表示精度和召回率都高。
归一化互信息 $I(U, V) = H(U) - H(U V) = H(U) + H(V) - H(U, V)$,$NMI(U, V) = \frac{2I(U, V)}{H(U) + H(V)}$
轮廓系数 $s(i) = \begin{cases} 1 - \frac{a_i}{b_i} & \text{if } a_i < b_i \ 0 & \text{if } a_i = b_i \ \frac{b_i}{a_i} - 1 & \text{if } a_i > b_i \end{cases} = \frac{b_i - a_i}{\max{a_i, b_i}}$ $a_i$ 是对象 $d_i$ 与簇 $C_i$ 中其他对象的平均距离,$b_i$ 是 $d_i$ 与其他簇中对象的最小平均距离。值在 $[-1, 1]$ 之间,接近 1 表示对象被正确聚类,接近 - 1 表示对象可能被错误聚类。

轮廓系数方法可以可视化对象在簇中的分配正确性,还可用于找到正确的簇数量。通过分析不同聚类解决方案的轮廓图,选择具有最佳簇轮廓的解决方案。

综上所述,不同的聚类方法适用于不同的场景,而合理选择评估指标可以帮助我们判断聚类结果的质量,从而更好地应用聚类技术解决实际问题。

聚类算法:原理、方法与评估(续)

深入理解聚类方法
1. 桶弹算法的改进

在聚类过程中,有一种方法会将对象(文档或文档簇)重新排列到桶中并进行聚合,直到找到 $k$ 个种子(通过聚合过程获得的树状图的根)。为了进一步改进种子选择结果,文档并非完全随机地分配到桶中。具体操作是,首先根据每个文档中第 $i$ 个最频繁单词的索引值对文档进行排序($i$ 通常是较小的数字,如 3,这样更倾向于中等频率的单词)。这样做能确保在这个排序中相邻的文档至少共享一个单词。另外,为了提高桶弹阶段的计算速度,会使用在算法第一阶段构建的预计算层次聚合结构中找到的初始 $k$ 个质心。其流程如下:
1. 对文档按第 $i$ 个最频繁单词的索引值排序。
2. 将排序后的文档分配到桶中。
3. 进行对象的聚合操作。
4. 重复步骤 2 和 3,直到找到 $k$ 个种子。

graph TD
    A[文档] --> B[按第i个最频繁单词索引值排序]
    B --> C[分配到桶中]
    C --> D[聚合操作]
    D --> E{是否找到k个种子}
    E -- 否 --> C
    E -- 是 --> F[结束]
2. 分裂层次聚类的特点与挑战

分裂层次聚类以自顶向下的方式构建层次结构,虽然它在某些情况下比凝聚聚类更高效,但也存在一些问题。当有 $n$ 个文档时,它们可以被拆分为 $2^{n - 1} - 1$ 种可能的非空组,即使 $n$ 较小,可能的拆分方式也非常多,计算上选择最佳拆分是不可行的。不过,在不需要创建完整层次结构时,分裂聚类过程通常比凝聚聚类更高效。为了得到有意义的结果,通常会设置一些终止条件,如找到 $k$ 个簇、达到最大层次深度、簇中剩余的最小文档数、实现簇内最小期望的同质性(相异性)等。

聚类评估指标的详细分析
1. 基于计数对的指标

基于计数对的评估方法是通过观察对象对在聚类解决方案和预定义分区中的放置情况来计算统计信息。假设有 $n$ 个对象 $x_1, \cdots, x_n$ 被聚类到簇 $C_1, \cdots, C_k$,同时有一个定义好的分区(真实情况)$P_1, \cdots, P_l$。对于数据集中的每一对 $(x_i, x_j)$,会出现以下四种情况:
- SS :对象属于聚类 $C$ 的同一簇,也属于分区 $P$ 的同一簇。
- SD :对象属于聚类 $C$ 的同一簇,但属于分区 $P$ 的不同簇。
- DS :对象属于聚类 $C$ 的不同簇,但属于分区 $P$ 的同一簇。
- DD :对象属于聚类 $C$ 的不同簇,也属于分区 $P$ 的不同簇。

$SS + SD + DS + DD$ 等于数据对的数量,即 $\frac{n(n - 1)}{2}$。其中,$SS$ 和 $DD$ 是好的分配,$SD$ 和 $DS$ 是不好的分配。基于这些情况,有以下几个评估指标:
|指标|公式|含义|
| ---- | ---- | ---- |
|Rand 统计量|$Rand Statistic = \frac{SS + DD}{SS + SD + DS + DD}$|值越高,说明聚类结果与真实分区匹配越好。|
|Jaccard 系数|$Jaccard Coefficient = \frac{SS}{SS + SD + DS}$|衡量聚类与真实分区的相似程度。|
|Folkes 和 Mallows 指数|$Folkes and Mallows Index = \sqrt{\frac{SS}{SS + SD} \cdot \frac{SS}{SS + DS}}$|评估聚类与真实分区的匹配程度。|

2. 纯度指标

纯度用于衡量簇 $C_i$ 中多数类的比例。其计算公式为 $Purity(C_i) = \max_{j \in L} \frac{l_{ij}}{\vert C_i \vert}$,其中 $L$ 是类的集合,$l_{ij}$ 是簇 $C_i$ 中属于类 $j$ 的文档数量,$\vert C_i \vert$ 是簇 $C_i$ 中的文档数量。整个聚类解决方案的纯度是所有簇纯度的加权平均值,即 $Purity = \sum_{i = 1}^{k} \frac{\vert C_i \vert}{n} Purity(C_i)$。当一个簇只包含一个类的实例时,其纯度为 1,表示该簇非常纯净。

3. 熵指标

熵是另一种衡量簇质量的指标,它基于香农提出的信息论概念。计算熵时,首先要计算文档 $j$ 属于每个类 $j \in L$ 的概率 $p_{ij} = \frac{l_{ij}}{\vert C_i \vert}$。然后,簇 $i$ 的熵计算公式为 $Entropy(C_i) = \sum_{j \in L} p_{ij} \log p_{ij}$。整个聚类解决方案的熵是所有簇熵的加权和,即 $Entropy = \sum_{i = 1}^{k} \frac{\vert C_i \vert Entropy(C_i)}{n}$。熵值越低,说明簇的质量越好,当簇只包含一个类的实例时,熵值为 0。

4. F - 度量指标

F - 度量结合了精度和召回率,常用于信息检索和分类,也适用于聚类评估。对于类 $j$ 在簇 $C_i$ 中的精度计算公式为 $Precision(i, j) = \frac{l_{ij}}{\vert C_i \vert}$,召回率计算公式为 $Recall(i, j) = \frac{l_{ij}}{l_j}$,其中 $l_j$ 是类 $j$ 的文档总数。$F(i, j) = \frac{2 Precision(i, j) Recall(i, j)}{Precision(i, j) + Recall(i, j)}$ 是类 $j$ 在簇 $C_i$ 中的 F - 度量值。整个聚类解决方案的 F - 度量是所有类在所有簇上的 F - 度量的平均值,即 $F = \sum_{j = 1}^{l} \frac{l_j}{n} \max_{i = 1..k} F(i, j)$。值接近 1 表示精度和召回率都高。

5. 归一化互信息指标

归一化互信息(NMI)属于信息论度量,用于衡量两个聚类(一个由算法找到,另一个由人类创建)共享的信息量。互信息 $I(U, V)$ 可以通过 $I(U, V) = H(U) - H(U|V) = H(U) + H(V) - H(U, V)$ 计算,其中 $H(U)$ 是聚类 $U$ 的熵,$H(U|V)$ 是在已知 $V$ 的情况下 $U$ 的条件熵,$H(U, V)$ 是 $U$ 和 $V$ 的联合熵。为了便于比较不同的聚类解决方案,通常使用归一化版本 $NMI(U, V) = \frac{2I(U, V)}{H(U) + H(V)}$,其值在 $[0, 1]$ 之间。

6. 轮廓系数指标

轮廓系数方法由 Rousseeuw 提出,它针对每个对象计算其在所在簇中的位置以及与其他簇的分离程度。对于簇 $C_i$ 中的对象 $d_i$,首先计算 $d_i$ 与 $C_i$ 中其他对象的平均距离 $a_i$,$a_i$ 值越小,说明簇内对象越同质。然后,计算 $d_i$ 与其他所有簇 $C_j$($j = 1 \cdots k$,$j \neq i$)中对象的平均距离,取其中的最小值 $b_i$,$b_i$ 值越大,说明 $d_i$ 与其他簇的对象越不同。轮廓系数 $s(i)$ 的计算公式为:
[
s(i) =
\begin{cases}
1 - \frac{a_i}{b_i} & \text{if } a_i < b_i \
0 & \text{if } a_i = b_i \
\frac{b_i}{a_i} - 1 & \text{if } a_i > b_i
\end{cases}
= \frac{b_i - a_i}{\max{a_i, b_i}}
]
其值在 $[-1, 1]$ 之间,接近 1 表示对象被正确聚类,接近 - 1 表示对象可能被错误聚类,值为 0 表示对象处于最佳簇和次佳簇之间。轮廓系数方法还可以通过可视化对象在簇中的分配正确性来帮助找到正确的簇数量,通过分析不同聚类解决方案的轮廓图,选择具有最佳簇轮廓的解决方案。

聚类方法的实际应用考量

在实际应用中,需要根据数据的特点和具体需求选择合适的聚类方法。例如,当数据存在自然大簇时,简单地划分较大簇的分裂聚类方法可能不太合适,而选择使选定准则函数值得到最大改善的方法可能更优。对于约束聚类,当聚类文档共享大量词汇时,使用基于扁平聚类约束的凝聚聚类可以避免一些问题;当有外部知识(如必须链接和不能链接信息)时,COP - K - 均值算法能更好地利用这些信息进行聚类。

同时,在评估聚类结果时,不能仅仅依赖单一的评估指标,而应该综合考虑多个指标。例如,纯度和熵可以从不同角度反映簇的质量,F - 度量结合了精度和召回率,归一化互信息可以衡量聚类结果与人类判断的一致性,轮廓系数可以直观地展示对象在簇中的分配情况。

总之,聚类算法是数据挖掘中强大的工具,但要想充分发挥其作用,需要深入理解各种聚类方法的原理和适用场景,合理选择评估指标来判断聚类结果的质量,从而更好地解决实际问题,如信息检索、文本分类等领域的应用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值