谱聚类算法的原理与实现步骤
我来为你讲解一个尚未在列表中出现的经典机器学习算法题目——谱聚类(Spectral Clustering)的核心原理与完整实现步骤。
1. 算法描述:什么是谱聚类?
谱聚类是一种基于图论和谱图理论的聚类方法,它将数据集视为图上的节点,通过分析图的结构(特别是图的拉普拉斯矩阵的特征向量)来对数据进行划分。与K-means等基于距离的算法不同,谱聚类特别擅长处理非凸形状或具有复杂流形结构的数据。
核心思想:
将数据集中的每个样本看作图中的一个顶点(Vertex)。根据样本间的相似度构建加权图(相似度高的样本之间边权重高)。聚类的目标就转化为图划分问题,即寻找一种切割方式,使得不同子图(簇)之间的边权重尽可能低(切割小),而子图内部的边权重尽可能高(连接紧密)。通过求解图的拉普拉斯矩阵的特征向量,我们可以获得数据的低维嵌入表示,然后在这个新的表示空间中使用简单的聚类算法(如K-means)完成最终聚类。
2. 解题过程:循序渐进理解算法步骤
我们将详细拆解谱聚类的五个关键步骤。
步骤一:构建相似度图(Graph Construction)
目标:将数据点集合转化为一个无向加权图 \(G = (V, E)\),其中 \(V\) 是顶点集合(对应数据点),\(E\) 是边集合,每条边有一个权重 \(W_{ij}\) 表示点 \(i\) 和点 \(j\) 的相似度。
关键操作:
- 计算相似度矩阵 \(S\):通常使用高斯核(径向基函数,RBF)来衡量任意两点 \(x_i\) 和 \(x_j\) 的相似度。
\[ s_{ij} = \exp\left(-\frac{\|x_i - x_j\|^2}{2\sigma^2}\right) \]
其中 $ \sigma $ 是尺度参数(带宽),控制相似度衰减的速度。$ s_{ij} $ 在0到1之间,距离越近,相似度越高。
- 选择构图方法:直接使用全连接图(每个点都与其他所有点相连)计算量巨大,因此常用以下近似方法:
- ε-邻域图:仅当两点间的距离小于阈值 \(\epsilon\) 时,才连接一条边。权重可以是1(无权图)或基于距离计算。
- k-最近邻图:每个点仅与其k个最相似的点(k个最近邻)连接。可以是互相k近邻(两点互为近邻才连接)或单向k近邻(只要一方认为对方是近邻就连接)。更常用互相k近邻,以保证图的对称性。
结果:我们得到一个 \(n \times n\) 的权重矩阵 \(W\),其中 \(W_{ij}\) 就是构建的图中顶点 \(i\) 和 \(j\) 之间的边权重。对于不相连的点对,\(W_{ij} = 0\)。\(W\) 是一个对称矩阵。
步骤二:计算图的拉普拉斯矩阵(Graph Laplacian)
目标:获取一个能够刻画图结构重要性质的矩阵,其谱(特征值和特征向量)包含了图的连通性信息。
拉普拉斯矩阵有多种形式,最常用的是:
- 非标准化(组合)拉普拉斯矩阵:
\[ L = D - W \]
其中 $ D $ 是**度矩阵**,一个对角矩阵,其对角线元素 $ D_{ii} = \sum_{j=1}^{n} W_{ij} $,表示顶点 $ i $ 所有边的权重之和。
- 标准化拉普拉斯矩阵(效果通常更好,能减少度分布不均的影响):
- 对称标准化拉普拉斯:
\[ L_{sym} = D^{-1/2} L D^{-1/2} = I - D^{-1/2} W D^{-1/2} \]
* **随机游走标准化拉普拉斯**:
\[ L_{rw} = D^{-1} L = I - D^{-1} W \]
它与随机游走在图上的转移概率矩阵相关。
选择:对于谱聚类,通常使用 \(L_{sym}\) 或 \(L_{rw}\),因为它们具有更好的理论性质(特征值在[0,2]区间等)。
步骤三:特征分解(Eigendecomposition)
目标:提取图的“谱”信息,为数据提供新的低维表示。
关键操作:
- 计算所选拉普拉斯矩阵(例如 \(L_{sym}\))的 前k个最小的特征值及其对应的特征向量。k是我们要寻找的簇的数量。
- 将这些特征向量(每个是n维向量)作为列,排列成一个 \(n \times k\) 的矩阵 \(U\):
\[ U = [\mathbf{u}_1, \mathbf{u}_2, ..., \mathbf{u}_k] \in \mathbb{R}^{n \times k} \]
其中 $ \mathbf{u}_i $ 是对应第 $ i $ 小特征值的特征向量。
直观理解:
- 拉普拉斯矩阵的最小特征值总是0,对应的特征向量是常向量(所有元素相等),它代表图的连通分量。第2小、第3小...的特征值对应的特征向量,包含了图的最优切割信息。
- 矩阵 \(U\) 的每一行(一个k维向量)可以看作原始数据点 \(x_i\) 在由这些特征向量张成的新空间中的嵌入坐标。在这个新空间中,数据点的几何结构变得更加“凝聚”,更适合进行简单的聚类。
步骤四:在新特征空间中进行聚类(Re-clustering in Embedding Space)
目标:对经过谱嵌入变换后的点进行聚类。
关键操作:
- 将矩阵 \(U\) 的每一行视为一个新样本点 \(y_i \in \mathbb{R}^{k}\)(\(i = 1, ..., n\))。
- 如果使用 \(L_{rw}\),通常还需要对 \(U\) 的行进行标准化(使其模长为1),以消除缩放影响。
- 在这个新的k维空间 \(\{y_1, y_2, ..., y_n\}\) 中,使用K-means算法(或其他简单聚类算法)将这些点聚成k个簇。
为什么这样做有效?
原始空间中复杂的非线性流形结构,在通过拉普拉斯矩阵的特征向量变换后,被“拉直”或“展开”成了近似超球面上的点团。K-means算法在识别这种球状簇时非常高效。这就将困难的非凸聚类问题,转化为了简单的凸聚类问题。
步骤五:映射回原始空间(Back to Original Space)
目标:获得原始数据点的最终聚类标签。
关键操作:
- 将在新空间中通过K-means得到的簇标签,直接对应回原始的数据点 \(x_i\)。
- 例如,如果新空间中的点 \(y_i\) 被K-means分配到簇 \(C_j\),那么原始数据点 \(x_i\) 也就属于簇 \(C_j\)。
3. 算法总结与流程图
让我们用一个简化的流程图回顾整个过程:
原始高维数据点 (x_i)
↓
[步骤1] 构建相似度图 → 得到权重矩阵 W
↓
[步骤2] 计算标准化拉普拉斯矩阵 (如 L_sym)
↓
[步骤3] 特征分解,取前k个最小特征值对应的特征向量 → 得到嵌入矩阵 U (n×k)
↓
[步骤4] 将U的每一行作为新点 y_i,在新空间运行 K-means (聚成k类)
↓
[步骤5] 将K-means的簇标签映射回原始数据点 x_i
↓
最终聚类结果
4. 关键点与注意事项
- 相似度度量与图构建:高斯核的带宽参数 \(\sigma\) 和 k-近邻图的参数 \(k\) 对结果影响很大,通常需要调优。
- 拉普拉斯矩阵的选择:对于大多数情况,对称标准化拉普拉斯矩阵 \(L_{sym}\) 是稳健的选择。
- 特征向量的作用:第二小特征值(称为谱隙或Fiedler值)的大小可以反映图分割的难易程度。特征向量提供了数据在低维的“谱嵌入”。
- K-means的初始化:在步骤四中,K-means的初始中心选择也可能影响最终结果,可以使用K-means++等改进的初始化方法。
谱聚类通过图表示和谱分解,巧妙地绕过了原始数据空间中复杂的距离度量问题,是处理不规则形状簇的强大工具。希望这个细致的分步讲解能帮助你透彻理解它!