21、文本聚类算法与准则函数详解

文本聚类算法与准则函数详解

1. 准则函数

在文本聚类中,准则函数起着关键作用,它能帮助我们评估聚类结果的质量,以下是几种常见的准则函数:
- 外部准则函数(External Criterion Function) :外部准则函数 $E_1$ 主要关注各个聚类之间的相异性优化。其公式为:
$E_1 = \sum_{c=1}^{k} n_c \cos(c_c, c_{all})$
其中,$k$ 是聚类的数量,$c_c$ 是聚类 $C_c$ 的质心,$c_{all}$ 是整个文档集合的质心。我们的目标是最小化 $E_1$ 的值,这意味着向量 $c_c$ 和 $c_{all}$ 之间的夹角要尽可能大。
- 混合准则函数(Hybrid Criterion Functions) :混合准则函数并非只优化单一准则,而是综合考虑多个准则。它结合了内部和外部准则,避免了只关注聚类内部相似性而忽略不同聚类间文档关系,或者只关注聚类间相似性而不考虑聚类内部相似性的问题。常见的混合准则函数有:
$H_1 = \frac{I_1}{E_1}$
$H_2 = \frac{I_2}{E_1}$
当使用余弦相似度作为相似性度量时,内部函数 $I_1$ 和 $I_2$ 通常需要最大化。虽然 $E_1$ 通常是最小化的,但由于 $H_1$ 和 $H_2$ 的值与 $E_1$ 成反比,所以它们需要最大化。
- 基于图的准则函数(Graph Based Criterion Functions)
- 准则函数 $G_1$ :在基于图的聚类中,一种自然的方法是在相似度图 $S$ 的边上找到最小割。边割定义为连接一个聚类中的文档顶点与其他聚类中文档顶点的边的总和。准则函数 $G_1$ 不仅考虑了外部视角,还考虑了内部边的总和,公式如下:
$G_1 = \sum_{c=1}^{k} \frac{\sum_{x_i \in S_c, x_j \in S - S_c} \cos(x_i, x_j)}{\sum_{x_i, x_j \in S_c} \cos(x_i, x_j)}$
由于在这个过程中同时考虑了内部和外部相似性,所以准则函数 $G_1$ 也可以被视为混合准则函数。
- 归一化割准则函数 $G_2$ :在二分图(顶点代表文档和术语,边对应术语在文档中的存在情况)上工作的归一化割准则函数 $G_2$ 旨在寻找最优的边割,其定义为:
$G_2 = \sum_{c=1}^{k} \frac{cut(V_c, V - V_c)}{W(V_c)}$
其中,$V_c$ 是分配给第 $c$ 个聚类的顶点集,$W(V_c)$ 是分配给第 $c$ 个聚类的顶点的邻接列表的权重总和。

2. 确定聚类数量

确定所需的聚类数量是一个重要的参数,特别是对于扁平聚类算法。然而,这个数量通常很难提前确定,因为真实的聚类结构往往不清晰。在理想情况下,只有人类专家才能判断一个聚类解决方案是否适合特定任务。有时,聚类数量可能会受到技术限制,例如在 Scatter - Gather 算法中,最初 PC 屏幕最多只能显示 10 个聚类。

确定聚类数量的方法有多种:
- 肘部法(Elbow Method) :通过观察聚类质量指标(如簇内平方误差和)随聚类数量的变化来确定。当该指标的下降趋势出现明显转折(即“肘部”)时,对应的聚类数量就是一个较好的选择。例如,在使用 k - means 方法对对象进行聚类时,计算不同聚类数量下的簇内平方误差和,当聚类数量达到 5 时,误差函数值的急剧下降停止,之后误差仅略有下降,此时 5 个聚类就是一个在聚类质量和通用性之间的良好折衷。
- 轮廓系数法(Silhouette Method) :该方法可以量化聚类内部的同质性和聚类之间的分离度。通过计算不同聚类解决方案的平均轮廓系数,选择具有最佳值的解决方案。
- 特定任务公式 :在信息检索中,Can 和 Ozkarahan 开发了一个公式来确定合适的聚类数量:
$k = \frac{m \cdot n}{t}$
其中,$n$ 是术语的数量,$m$ 是文档的数量,$t$ 是术语分配的总数。

3. 聚类算法
  • K - Means 算法 :K - means 是最著名的扁平聚类算法,它通过迭代改进初始聚类解决方案,以最小化文档与所属聚类中心(均值)之间的距离。具体步骤如下:
    1. 初始选择 $K$ 个文档作为聚类中心 $c_1, c_2, \cdots, c_k$。
    2. 对于每个文档 $d_i \in D$,找到其最近的中心 $c_j$,并将该文档分配到相应的聚类 $C_j$ 中($C_j \leftarrow C_j + {d_i}$)。
    3. 根据当前聚类中的文档分配重新计算聚类中心。
    4. 如果未满足停止准则,则返回步骤 2;否则,找到聚类解决方案。

常见的停止准则包括:
- 文档到聚类的分配(即质心的位置)在迭代之间不再变化,这意味着找到了全局或局部最优解。
- 准则函数的值达到某个阈值,表明聚类解决方案具有足够的质量。
- 准则函数值的变化(改进)低于某个阈值,意味着聚类解决方案几乎收敛到最优解(可能是局部最优解)。
- 执行了一定数量的迭代,但这种方法不能保证迭代次数足以得到具有所需质量的聚类解决方案。

需要注意的是,如果选择了离群点作为种子,很可能该文档会单独形成一个聚类,这是没有意义的。因此,去除离群点可能是避免此问题的好方法。此外,选择合适的种子对于扁平聚类方法的成功至关重要,因为不同的种子可能会导致不同的分区。可以多次执行该算法并选择最佳解决方案,或者根据一些外部知识(如层次聚类方法的结果)来选择种子。

K - means 算法会产生凸(球形)聚类,无法找到其他形状的聚类,并且聚类中心容易受到离群点的影响。为了克服对离群点的敏感性,可以使用 k - medians 方法,该方法使用中位数而不是均值来表示聚类。

  • K - Medoids 算法 :k - medoids 算法的工作方式与 k - means 算法类似。medoid 是最接近质心的文档。使用 medoids 而不是均值的好处是可以降低计算复杂度。在计算两个文档之间的距离时,通常使用它们向量的所有非零元素。与通常由非常稀疏向量表示的单个文档相比,以聚类均值形式存在的质心包含的非零元素较少,因为它们对聚类中所有文档元素的权重进行了平均。因此,使用 medoids 可以减少计算距离时的计算量。

  • 准则函数优化算法 :Zhao 和 Karypis 提出了一种用于聚类大型文档数据集的算法,该算法包含初始聚类和多次聚类细化迭代。细化阶段的目标是改进给定准则函数的值。具体步骤如下:

    1. 初始选择 $k$ 个文档作为种子。
    2. 根据与种子中最相似的文档,将每个文档分配到一个聚类中。
    3. 对于每个文档(按随机顺序访问):
      • 计算要优化的准则函数的值。
      • 将该文档分配到所有其他聚类中,并计算每种分配情况下的准则函数值。
      • 将文档移动到能最大程度改进准则函数值的聚类中。如果无法改进,则文档保持在原聚类中。
    4. 如果有文档移动,则重复步骤 3;否则,结束。

与 k - means 方法相比,该方法在明确知道移动对象会改进准则函数值后立即进行移动,这被称为增量算法。但这种贪心方法不一定能得到最优解,可能会找到准则函数的局部最优解。为了避免这种情况,可以多次重复该过程并选择最佳解决方案。

  • 凝聚层次聚类算法(Agglomerative Hierarchical Clustering) :在凝聚层次聚类中,单个文档会不断合并形成越来越大的聚类。这是一个计算量较大的过程,一般步骤如下:
    1. 将所有 $n$ 个要聚类的文档分别放入单独的聚类中,得到 $n$ 个聚类 $C_1, C_2, \cdots, C_n$。
    2. 计算每个聚类与其余聚类的相似度,相似度可以存储在相似度矩阵中。
    3. 找到最大相似度,从而确定两个最相似的聚类 $C_i$ 和 $C_j$。
    4. 合并聚类 $C_i$ 和 $C_j$,形成一个新的聚类。
    5. 重复步骤 2、3 和 4,直到只剩下一个聚类。

在这个过程中,计算聚类之间相似度的度量方法会影响所创建聚类的性质。常见的合并聚类方法有:
- 单链接聚类(Single Linkage Clustering,SLINK) :根据聚类中最相似对象的相似度来合并聚类。该方法强调聚类接近的区域,忽略了原始和新创建聚类的整体形状,并且对离群点敏感。公式如下:
$d_{SLINK}(H_i, H_j) = \min_{x_i \in H_i, x_j \in H_j} d(x_i, x_j)$
当新创建的聚类要与第三个聚类合并时,相似度计算为:
$d_{SLINK}(H_k, (H_i, H_j)) = \min(d(H_k, H_i), d(H_k, H_j))$
- 全链接聚类(Complete Linkage Clustering,CLINK) :根据两个最不相似对象的相似度来确定相似度。这意味着两个聚类的并集具有最小的直径,聚类倾向于更紧凑。但离群点会导致结果聚类非常大。公式如下:
$d_{CLINK}(H_i, H_j) = \max_{x_i \in H_i, x_j \in H_j} d(x_i, x_j)$
当合并新聚类与另一个聚类时,距离计算为:
$d_{CLINK}(H_k, (H_i, H_j)) = \max(d(H_k, H_i), d(H_k, H_j))$
- 算术平均方法(Arithmetic Average Methods)
- 无权重算术平均聚类(Unweighted Arithmetic Average Clustering,UPGMA) :将两个要合并的聚类之间的距离计算为所有聚类成员之间的平均距离,对所有对象赋予相同的权重。公式如下:
$d_{UPGMA}(H_i, H_j) = \frac{1}{N_i \cdot N_j} \sum_{x_i \in H_i} \sum_{x_j \in H_j} d(x_i, x_j)$
当 $H_i$ 和 $H_j$ 合并时,到第三个聚类 $H_l$ 的距离计算为:
$d_{UPGMA}(H_k, (H_i, H_j)) = \frac{1}{2}(d(H_k, H_i) + d(H_k, H_j))$
这种方法会丢失合并聚类大小的信息。
- 加权算术平均聚类(Weighted Pair - Group Method using Arithmetic averages,WPGMA) :根据每个聚类中的对象数量对距离进行加权,较大的聚类会被降权。公式如下:
$d_{WPGMA}(H_k, (H_i, H_j)) = \frac{N_i}{N_i + N_k} d(H_k, H_i) + \frac{N_j}{N_j + N_k} d(H_k, H_j)$
- 质心凝聚聚类(Centroid Agglomerative Clustering)
- 无权重质心聚类(Unweighted Pair Group Method using Centroids,UPGMC) :将每个聚类用其均值(质心)表示,不考虑聚类的大小,将所有聚类视为同等重要。公式如下:
$d_{UPGMC}(H_i, H_j) = d(c_i, c_j)$
其中,$c_i$ 和 $c_j$ 是聚类 $H_i$ 和 $H_j$ 的质心。当测量与第三个聚类的相似度时,计算如下:
$d_{UPGMC}(H_k, (H_i, H_j)) = \frac{N_i}{N_i + N_j} d(H_k, H_i) + \frac{N_j}{N_i + N_j} d(H_k, H_j) - \frac{N_i N_j}{(N_i + N_j)^2} d(H_i, H_j)$
- 加权质心聚类(Weighted Pair Group Method with Centroid,WPGMC) :也称为中位数聚类,对较大的聚类进行降权,使相似度的计算与聚类中的对象数量无关。公式如下:
$d_{WPGMC}(H_k, (H_i, H_j)) = \frac{d(H_k, H_i) + d(H_k, H_j)}{2} - \frac{d(H_i, H_j)}{4}$
- 沃德距离(Ward Distance) :沃德距离定义为两个聚类合并时聚类解决方案的平方误差和的变化。误差计算为元素与其相应质心的平方距离。该度量实际上是 k - means 算法所最小化的值。公式如下:
$d_{Ward}(H_1, H_2) = \sum_{x \in H_1 \cup H_2} |x - c|^2 - \sum_{x \in H_1} |x - c_1|^2 - \sum_{x \in H_2} |x - c_2|^2 = \frac{N_1 \cdot N_2}{N_1 + N_2} \cdot |c_1 - c_2|^2$
其中,$N_i$ 是聚类 $i$ 中的文档数量,$c_i$ 是聚类 $i$ 的质心,$c$ 是合并后聚类的质心。

为了通用化计算聚类 $k$ 与由聚类 $i$ 和 $j$ 合并而成的聚类之间的距离,可以使用 Lance 和 Williams 递推公式:
$d_k(ij) = \alpha_i d_{ki} + \alpha_j d_{kj} + \beta d_{ij} + \gamma |d_{ki} - d_{kj}|$

不同方法的参数值如下表所示:
| 方法 | $\alpha_i$ | $\beta$ | $\gamma$ |
| — | — | — | — |
| SLINK | $\frac{1}{2}$ | 0 | $-\frac{1}{2}$ |
| CLINK | $\frac{1}{2}$ | 0 | $\frac{1}{2}$ |
| UPGMA | $\frac{N_i}{N_i + N_j}$ | 0 | 0 |
| WPGMA | $\frac{1}{2}$ | 0 | 0 |
| UPGMC | $\frac{N_i}{N_i + N_j}$ | $-\frac{N_i N_j}{(N_i + N_j)^2}$ | 0 |
| WPGMC | $\frac{1}{2}$ | $-\frac{1}{4}$ | 0 |
| Ward’s | $\frac{N_k + N_i}{N_k + N_i + N_j}$ | $-\frac{N_k}{N_k + N_i + N_j}$ | 0 |
| Flexible1 | $\frac{1}{2(1 - \beta)}$ | $\beta < 1$ | 0 |

  • Scatter - Gather 算法 :扁平方法比层次方法更高效,但它们依赖于初始种子,不如层次算法健壮。Scatter - Gather 算法是一种混合方法,它结合了扁平方法和层次方法的优点。该算法最初是一种文档浏览方法,它将文档集合划分为少量组,并向用户展示其简短摘要。用户选择一个或多个组,然后使用相同的方法(即聚类、摘要和组选择)进一步分析这些组。通过反复应用这些分散和聚集步骤,聚集的聚类会越来越详细,更接近用户的信息需求。

为了选择初始种子,可以使用以下两种方法:
- Buckshot 方法 :要将 $n$ 个文档聚类为 $k$ 个聚类,随机选择 $\sqrt{k \cdot n}$ 个文档,并使用凝聚方法将其聚类为 $k$ 个聚类。这些 $k$ 个聚类成为应用于整个数据集的扁平方法的种子。由于层次方法的复杂度为 $O(n^2)$,使用约为文档数量平方根的文档,复杂度变为 $O(k \cdot n)$。
- 分桶法(Fractionation) :将文档划分为 $\frac{n}{m}$ 个桶,其中 $m > k$ 是每个桶的大小。在每个桶中,使用凝聚层次聚类方法对文档进行聚类,直到桶中的聚类数量减少到一定程度。

以下是 K - Means 算法的流程 mermaid 图:

graph LR
    A[选择K个文档作为聚类中心] --> B[为每个文档找到最近中心并分配到聚类]
    B --> C[重新计算聚类中心]
    C --> D{是否满足停止准则}
    D -- 否 --> B
    D -- 是 --> E[得到聚类解决方案]

凝聚层次聚类算法的流程 mermaid 图如下:

graph LR
    A[将n个文档分别放入单独聚类] --> B[计算聚类间相似度]
    B --> C[找到最大相似度的两个聚类]
    C --> D[合并这两个聚类]
    D --> E{是否只剩一个聚类}
    E -- 否 --> B
    E -- 是 --> F[完成聚类]

综上所述,不同的准则函数和聚类算法适用于不同的场景和数据特点。在实际应用中,需要根据具体需求选择合适的方法,并结合确定聚类数量的技巧,以获得高质量的聚类结果。

文本聚类算法与准则函数详解(续)

4. 聚类算法对比

为了更清晰地了解不同聚类算法的特点,下面从多个方面对上述算法进行对比:

算法名称 聚类类型 复杂度 对离群点的敏感性 聚类形状 适用场景
K - Means 扁平聚类 通常为 $O(n \cdot k \cdot I)$,$n$ 是文档数,$k$ 是聚类数,$I$ 是迭代次数 凸(球形) 数据分布接近球形且离群点较少的场景
K - Medoids 扁平聚类 相对 K - Means 计算复杂度有所降低 凸(球形) 数据存在离群点,且对计算复杂度有一定要求的场景
准则函数优化算法 扁平聚类 取决于数据规模和准则函数计算复杂度 与准则函数相关 无特定形状限制 大型文档数据集,且希望优化特定准则函数的场景
凝聚层次聚类 层次聚类 $O(n^2)$ 因具体方法而异 无特定形状限制 希望了解数据的层次结构,对计算复杂度要求不高的场景
Scatter - Gather 算法 混合聚类 取决于选择的初始种子方法 相对较低 无特定形状限制 文档浏览,需要根据用户需求逐步细化聚类的场景
5. 实际应用中的考虑因素

在实际应用文本聚类时,除了选择合适的算法和确定聚类数量外,还需要考虑以下因素:

  • 数据预处理 :在进行聚类之前,需要对文本数据进行预处理,包括去除停用词、词干提取、分词等操作,以减少噪声数据对聚类结果的影响。
  • 相似度度量 :不同的相似度度量方法(如余弦相似度、欧几里得距离等)会对聚类结果产生影响。需要根据数据的特点和任务需求选择合适的相似度度量方法。
  • 可扩展性 :当处理大规模数据集时,算法的可扩展性是一个重要考虑因素。一些算法(如 K - Means、K - Medoids)在处理大规模数据时可能会遇到性能瓶颈,需要考虑使用分布式计算或近似算法来提高效率。
  • 可视化 :聚类结果的可视化可以帮助用户更好地理解聚类结构和数据分布。可以使用二维或三维散点图、树形图等方式对聚类结果进行可视化展示。
6. 案例分析

假设我们有一个新闻文档数据集,包含政治、体育、娱乐等不同主题的新闻文章。我们希望对这些文档进行聚类,以便用户可以快速浏览不同主题的新闻。

  • 数据预处理 :首先,对新闻文档进行分词处理,去除停用词,并进行词干提取。然后,将处理后的文档转换为向量表示,例如使用词袋模型或 TF - IDF 方法。
  • 选择算法和确定聚类数量 :考虑到数据规模较大,我们选择 K - Means 算法进行聚类。使用肘部法确定聚类数量,发现当聚类数量为 5 时,聚类质量和通用性达到较好的平衡。
  • 聚类过程 :随机选择 5 个文档作为初始聚类中心,然后迭代更新聚类中心,直到满足停止准则。
  • 结果评估 :使用轮廓系数法评估聚类结果的质量,发现聚类效果较好,不同主题的新闻文章被较好地分开。
  • 可视化展示 :使用二维散点图将聚类结果可视化,每个点代表一个新闻文档,不同颜色的点表示不同的聚类。用户可以直观地看到不同主题的新闻文章在空间中的分布情况。
7. 未来发展趋势

随着数据量的不断增加和应用场景的不断扩展,文本聚类技术也在不断发展。未来的发展趋势可能包括:

  • 深度学习在文本聚类中的应用 :深度学习模型(如神经网络、循环神经网络等)可以自动学习文本的特征表示,提高聚类的准确性和效率。
  • 多模态文本聚类 :结合文本、图像、音频等多种模态的数据进行聚类,以获得更全面的信息。
  • 实时聚类 :在实时数据流中进行聚类,以满足实时性要求较高的应用场景。
  • 可解释性聚类 :提高聚类结果的可解释性,让用户更好地理解聚类的依据和意义。

以下是一个简单的 Python 代码示例,使用 K - Means 算法对新闻文档数据集进行聚类:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import numpy as np

# 假设 news_docs 是新闻文档列表
news_docs = ["这是一篇政治新闻", "这是一篇体育新闻", "这是一篇娱乐新闻"]

# 数据预处理和特征提取
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(news_docs)

# 选择聚类数量
k = 3

# 初始化 K - Means 算法
kmeans = KMeans(n_clusters=k, random_state=42)

# 进行聚类
kmeans.fit(X)

# 输出聚类结果
labels = kmeans.labels_
for i in range(len(news_docs)):
    print(f"文档 {news_docs[i]} 属于聚类 {labels[i]}")

综上所述,文本聚类是一项重要的技术,在信息检索、文本挖掘等领域有着广泛的应用。通过选择合适的算法、确定聚类数量,并考虑实际应用中的各种因素,可以获得高质量的聚类结果。同时,关注未来的发展趋势,不断探索新的方法和技术,将有助于推动文本聚类技术的进一步发展。

以下是 Scatter - Gather 算法的流程 mermaid 图:

graph LR
    A[将文档集合划分为少量组] --> B[向用户展示组的摘要]
    B --> C{用户选择组}
    C -- 选择 --> D[对选择的组进行聚类和摘要]
    D --> B
    C -- 不选择 --> E[结束]

通过以上的介绍和分析,希望能帮助读者更好地理解文本聚类算法和准则函数,并在实际应用中做出更合适的选择。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值