聚类算法:原理、方法与评估指标
在数据挖掘和机器学习领域,聚类是一项重要的无监督学习任务,旨在将数据集中的对象分组为不同的簇,使得同一簇内的对象具有较高的相似性,而不同簇之间的对象具有较高的差异性。本文将介绍几种典型的聚类算法及其评估指标。
典型聚类算法
k - 均值算法(k - means)
k - 均值算法是一种经典的聚类算法,其基本步骤如下:
1. 预设簇的数量 $k$,例如 $k = 3$。
2. 将每个观测值与最近的均值关联,形成 $k$ 个簇,这些分区构成了由均值生成的 Voronoi 图。
3. 计算每个簇的中心,将其作为新的均值。
4. 重复步骤 2 和 3,直到收敛。
k - 均值算法的复杂度为 $O(tkn)$,其中 $n$ 是输入数据的数量,$k$ 是簇的数量,$t$ 是迭代次数。该算法属于硬聚类,且可能收敛于局部最优解,无法保证全局最优。若结合人工智能中的退火算法或遗传算法等技术,则有可能获得全局最优解。
高斯混合聚类(Gaussian Mixture Clustering)
高斯混合模型(Gaussian Mixture Model, GMM)是一种复杂的概率模型,假设所有数据点由有限个具有未知参数的高斯分布混合生成,并能根据概率分布将数据分类到不同的簇中。与经典的聚类算法(如 k - 均值)相比,GMM 能更好地识别不同形状和大小的簇。
GMM 的参数通常通过最大似然估计,使用期望最大化(Expectation - Maximization, EM)算法来确定。由 $k$ 个高斯分布叠加而成的 GMM 定义为:
[p(\mathbf{x}|\boldsymbol{\theta}) = \sum_{j = 1}^{k}\pi_{j}\mathcal{N}(\mathbf{x}|\boldsymbol{\mu}
{j},\boldsymbol{\sigma}
{j})]
其中,每个高斯分布 $\mathcal{N}(\mathbf{x}|\boldsymbol{\mu}
{j},\boldsymbol{\sigma}
{j})$ 称为混合模型的一个分量,具有自己的均值 $\boldsymbol{\mu}
{j}$ 和方差 $\boldsymbol{\sigma}
{j}$,$\pi_{j}$ 为混合系数,满足 $0\leq\pi_{j}\leq1$ 且 $\sum_{j = 1}^{k}\pi_{j} = 1$。
在聚类过程中,首先计算输入数据 $\mathbf{x}
{i}$ 属于第 $j$ 个簇 $G
{j}$ 的后验概率 $p(z_{i} = j|\mathbf{x}
{i},\boldsymbol{\theta})$,可使用贝叶斯定理进行计算:
[p(z
{i} = j|\mathbf{x}
{i},\boldsymbol{\theta})=\frac{p(z
{i} = j|\boldsymbol{\theta})p(\mathbf{x}
{i}|z
{i} = j,\boldsymbol{\theta})}{\sum_{j’ = 1}^{k}p(z_{i} = j’|\boldsymbol{\theta})p(\mathbf{x}
{i}|z
{i} = j’,\boldsymbol{\theta})}]
这种方法称为软聚类。若要减小不确定性,可使用平均精度均值(mean average precision, mAP)计算聚类结果,即:
[z_{i}^{*}=\arg\max_{j}p(z_{i} = j|\mathbf{x}
{i},\boldsymbol{\theta})=\arg\max
{j}(\log p(\mathbf{x}
{i}|z
{i} = j,\boldsymbol{\theta})+\log p(z_{i} = j|\boldsymbol{\theta}))]
这种方法称为硬聚类。
DBSCAN 算法
DBSCAN(Density - Based Spatial Clustering of Applications with Noise)是一种基于密度的空间聚类算法,由 Ester 等人在 1996 年提出。该算法的基本定义如下:
-
参数
:
- 密度阈值 $minPts$:表示高密度区域内的最小数据点数。
- 距离阈值 $\epsilon$:表示高密度区域的半径。
-
数据点类型
:
- 核心点:若数据点 $q\in D$,且 $|N_{\epsilon}(q)|\geq minPts$,则 $q$ 为核心点。
- 邻居:若数据点 $p\in D$,且 $N_{\epsilon}(p)={p|dist(p,q)\leq\epsilon}$,则 $p$ 为邻居。
- 离群点:既不是核心点也不是邻居的数据点。
-
密度可达性
:若存在数据点链 $p_{1},\cdots,p_{n}$,使得 $p_{1}\to q$,$p_{n}\to p$,且 $p_{i + 1}$ 可从 $p_{i}$ 直接密度可达,则数据点 $p$ 从数据点 $q$ 密度可达。
-
密度连通性
:若存在数据点 $o$,使得数据点 $p$ 和 $q$ 都可从 $o$ 密度可达,则数据点 $p$ 和 $q$ 密度连通。
DBSCAN 算法的主要步骤如下:
1. 检索每个点的所有邻居,识别其中的核心点。
2. 在邻域图中找到与核心点密度连通的数据点,忽略所有非核心点。
3. 将每个核心点的所有邻居组成相应的簇,将离群点视为噪声点。
4. 若某个核心点没有更多的密度可达点,则检索数据集中的下一个数据点。
DBSCAN 算法能够将密度高于阈值的区域划分为一个簇,并将低密度区域的离散数据点标记为噪声。该算法在 2014 年获得了 ACM SIGKDD 国际知识发现与数据挖掘会议的时间检验奖。
密度峰值聚类(Density Peak Clustering)
传统的聚类算法(如 k - 均值和 k - 中心点)在寻找簇的质心时,通常需要通过多次迭代找到局部最优解,但无法保证全局最优。密度峰值聚类是一种快速寻找簇中心的新方法,由 Rodriguez 和 Laio 在 2014 年提出。该方法选择簇中心的两个基本思想如下:
-
密度方面
:簇中心的密度高于其邻居。
-
距离方面
:簇中心与密度更高的点之间的距离较大。
对于输入数据集 $D = {\mathbf{x}
{i}|i = 1,\cdots,n}$,定义两个变量 $\rho
{i}$ 和 $\delta_{i}$:
- $\rho_{i}$ 表示第 $i$ 个数据点的局部密度,计算公式为:
[\rho_{i}=\sum_{j}I(d_{ij}-d_{c})]
其中,$d_{ij}=dist(\mathbf{x}
{i},\mathbf{x}
{j})$ 是数据点 $\mathbf{x}
{i}$ 和 $\mathbf{x}
{j}$ 之间的欧几里得距离,$d_{c}$ 是截止距离,$I(\omega)$ 是指示函数,当 $\omega\lt0$ 时为 1,否则为 0。
- $\delta_{i}$ 是第 $i$ 个数据点与任何密度更高的数据点之间的最小距离,计算公式为:
[\delta_{i}=\min_{j:\rho_{j}\gt\rho_{i}}(d_{ij})]
对于密度最高的点,$\delta_{i}=\min_{j}(d_{ij})$。
当 $\delta_{i}$ 的值异常大时,该点被识别为簇中心。密度峰值聚类方法具有直观获取簇的数量和中心、自动发现并排除离群点、无需考虑数据的形状和维度等优点。
聚类算法评估指标
由于聚类是无监督学习任务,没有已知的标签,因此评估聚类模型的正确性较为困难。目前,聚类评估方法主要分为两类:
|评估类型|评估指标|
| ---- | ---- |
|外部评估指标|调整兰德指数(Adjusted Rand Index, ARI)、调整互信息(Adjusted Mutual Information, AMI)、Fowlkes - Mallows 指数、V - Measure|
|内部评估指标|Calinski - Harabasz 指数、Davies - Bouldin 指数、轮廓系数(Silhouette Coefficient)|
调整兰德指数(Adjusted Rand Index, ARI)
兰德指数(Rand Index, RI)用于衡量聚类算法的分组结果与聚类基准之间的相似性。给定数据集 $D = {\mathbf{x}
{i}|i = 1,\cdots,n}$,聚类基准的标记簇集 $U = {U
{k}|k = 1,\cdots,r}$ 和聚类算法的预测簇集 $V = {V_{l}|l = 1,\cdots,s}$,定义:
- $a = |\hat{D}|$,其中 $\hat{D}={\langle\mathbf{x}
{i},\mathbf{x}
{i’}\rangle|\mathbf{x}
{i},\mathbf{x}
{i’}\in U_{k},\mathbf{x}
{i},\mathbf{x}
{i’}\in V_{l}}$。
- $b = |\hat{D}|$,其中 $\hat{D}={\langle\mathbf{x}
{i},\mathbf{x}
{i’}\rangle|\mathbf{x}
{i}\in U
{k},\mathbf{x}
{i’}\in U
{k’},\mathbf{x}
{i}\in V
{l},\mathbf{x}
{i’}\in V
{l’}}$。
兰德指数定义为:
[RI=\frac{a + b}{\binom{n}{2}}]
其中,$\binom{n}{2}=\frac{n(n - 1)}{2}$ 是 $n$ 个数据中可枚举的数据对数量。RI 的取值范围为 $[0, 1]$,0 表示预测簇集 $V$ 与标记簇集 $U$ 完全不同,1 表示两者完全相同。
基于兰德指数,调整兰德指数(ARI)定义为:
[ARI=\frac{RI - E[RI]}{\max(RI)-E[RI]}]
其中,$E[RI]$ 是 RI 的期望值,$\max(RI)$ 是 RI 的最大值。ARI 的取值范围为 $[-1, 1]$,值越大表示聚类算法与聚类基准的相似性越好。
例如,给定数据集 $D = {\mathbf{x} {1},\mathbf{x} {2},\mathbf{x} {3},\mathbf{x} {4},\mathbf{x} {5},\mathbf{x} {6}}$,标记簇集 $U = {( \mathbf{x} {1},\mathbf{x} {2}),( \mathbf{x} {3},\mathbf{x} {4}),( \mathbf{x} {5},\mathbf{x} {6})}$,预测簇集 $V = {( \mathbf{x} {1},\mathbf{x} {2},\mathbf{x} {3}),( \mathbf{x} {4},\mathbf{x} {5},\mathbf{x} {6})}$。通过比较可得 $a = 2$,$b = 8$,则兰德指数 $RI=\frac{2 + 8}{\binom{6}{2}}=\frac{10}{15}\approx0.67$。
调整互信息(Adjusted Mutual Information, AMI)
调整互信息源于互信息的概念,可用于衡量聚类算法与聚类基准之间的一致性。
综上所述,不同的聚类算法适用于不同的数据集和应用场景,而评估指标则有助于我们选择合适的聚类算法并评估其性能。在实际应用中,我们可以根据数据的特点和需求选择合适的算法和评估指标。
聚类算法:原理、方法与评估指标
聚类评估指标详解(续)
Fowlkes - Mallows 指数
Fowlkes - Mallows 指数(FMI)也是一种用于衡量聚类结果与真实标签之间相似性的外部评估指标。它基于真阳性(True Positives)和假阳性(False Positives)的概念。
设 $a$ 为在聚类结果和真实标签中都属于同一簇的数据对数量,$b$ 为在聚类结果中属于同一簇但在真实标签中不属于同一簇的数据对数量,$c$ 为在真实标签中属于同一簇但在聚类结果中不属于同一簇的数据对数量。
Fowlkes - Mallows 指数的计算公式为:
[FMI = \frac{a}{\sqrt{(a + b)(a + c)}}]
FMI 的取值范围是 $[0, 1]$,值越接近 1 表示聚类结果与真实标签的一致性越好。
V - Measure
V - Measure 结合了同质性(Homogeneity)和完整性(Completeness)两个概念。
同质性衡量的是每个簇是否只包含来自一个类别的数据点,完整性衡量的是每个类别是否都被分配到同一个簇中。
设 $H(C|K)$ 表示在聚类结果 $K$ 下类标签 $C$ 的条件熵,$H(C)$ 表示类标签 $C$ 的熵,$H(K)$ 表示聚类结果 $K$ 的熵。
同质性 $h$ 的计算公式为:
[h = 1-\frac{H(C|K)}{H(C)}]
完整性 $c$ 的计算公式为:
[c = 1-\frac{H(C|K)}{H(K)}]
V - Measure 是同质性和完整性的调和平均值,计算公式为:
[V = \frac{(1 + \beta)\times h\times c}{\beta\times h + c}]
其中 $\beta$ 是一个权重参数,通常取 1,表示同质性和完整性具有相同的重要性。
V - Measure 的取值范围也是 $[0, 1]$,值越接近 1 表示聚类结果越好。
Calinski - Harabasz 指数
Calinski - Harabasz 指数(CH 指数)是一种内部评估指标,用于衡量聚类结果的紧凑性和分离度。
设 $k$ 为聚类的数量,$n$ 为数据点的总数,$B$ 为类间离散矩阵,$W$ 为类内离散矩阵。
CH 指数的计算公式为:
[CH=\frac{tr(B)/(k - 1)}{tr(W)/(n - k)}]
其中 $tr$ 表示矩阵的迹。
CH 指数的值越大,表示聚类结果的紧凑性和分离度越好,即聚类效果越好。
Davies - Bouldin 指数
Davies - Bouldin 指数(DB 指数)也是一种内部评估指标,用于衡量聚类结果的紧凑性和分离度。
设 $k$ 为聚类的数量,$S_i$ 表示第 $i$ 个簇内数据点到该簇中心的平均距离,$d_{ij}$ 表示第 $i$ 个簇中心和第 $j$ 个簇中心之间的距离。
DB 指数的计算公式为:
[DB=\frac{1}{k}\sum_{i = 1}^{k}\max_{j\neq i}\frac{S_i+S_j}{d_{ij}}]
DB 指数的值越小,表示聚类结果的紧凑性和分离度越好,即聚类效果越好。
轮廓系数(Silhouette Coefficient)
轮廓系数用于衡量每个数据点与其所在簇的紧密程度以及与其他簇的分离程度。
对于每个数据点 $i$,设 $a(i)$ 为该数据点到其所在簇内其他数据点的平均距离,$b(i)$ 为该数据点到其他簇中数据点的最小平均距离。
数据点 $i$ 的轮廓系数 $s(i)$ 计算公式为:
[s(i)=\frac{b(i)-a(i)}{\max{a(i),b(i)}}]
整个聚类结果的轮廓系数是所有数据点轮廓系数的平均值。
轮廓系数的取值范围是 $[-1, 1]$,值越接近 1 表示数据点与其所在簇的紧密程度越高,与其他簇的分离程度越好,聚类效果越好。
聚类算法选择与应用建议
在实际应用中,选择合适的聚类算法至关重要。以下是一些选择聚类算法的建议:
-
数据规模
:如果数据规模较小,k - 均值算法可能是一个不错的选择,因为它简单且计算效率较高。如果数据规模较大,DBSCAN 或密度峰值聚类可能更适合,因为它们不需要预先指定簇的数量,并且对噪声有较好的鲁棒性。
-
数据形状
:如果数据具有明显的球形或椭球形分布,k - 均值算法可能会有较好的效果。如果数据形状不规则,高斯混合聚类或 DBSCAN 可能更合适。
-
是否有噪声
:如果数据中存在噪声,DBSCAN 是一个很好的选择,因为它能够自动识别并标记噪声点。
-
是否需要预先知道簇的数量
:如果能够预先知道簇的数量,k - 均值算法或高斯混合聚类可以使用。如果无法预先确定簇的数量,DBSCAN 或密度峰值聚类更适合。
以下是一个简单的选择聚类算法的流程图:
graph TD;
A[数据规模小] --> B{k - 均值算法};
A[数据规模大] --> C{数据形状规则?};
C -->|是| D{k - 均值算法};
C -->|否| E{是否有噪声?};
E -->|是| F{DBSCAN};
E -->|否| G{是否需预先知簇数量?};
G -->|是| H{高斯混合聚类};
G -->|否| I{密度峰值聚类};
总结
聚类算法在数据挖掘和机器学习中有着广泛的应用,不同的聚类算法具有不同的特点和适用场景。同时,选择合适的评估指标对于评估聚类结果的质量也非常重要。
在实际应用中,我们可以根据数据的特点(如规模、形状、是否有噪声等)选择合适的聚类算法,并使用相应的评估指标来评估聚类效果。通过不断地尝试和优化,我们可以得到更准确、更有效的聚类结果,从而为数据分析和决策提供有力的支持。
希望本文能够帮助读者更好地理解聚类算法和评估指标,在实际应用中做出更明智的选择。
超级会员免费看
10万+

被折叠的 条评论
为什么被折叠?



