通俗易懂讲透谱聚类(Spectral Clustering)

张开发
2026/4/18 18:45:20 15 分钟阅读

分享文章

通俗易懂讲透谱聚类(Spectral Clustering)
通俗易懂讲透谱聚类Spectral Clustering本科生/研究生都能看懂谱聚类是解决复杂形状、非线性边界数据最强的聚类算法之一K-Means分不出来的月牙形、环形、交错数据它都能轻松搞定。本文用大白话生活案例数学推导可直接运行代码总结适合课堂笔记、实验报告。一、谱聚类是什么一句话讲明白谱聚类 把数据建成图 → 切图分组 → 降维 → 简单聚类核心不直接看原始坐标而是看点与点之间的“连接关系”。对比一下K-Means只看距离只擅长球形簇谱聚类看连接强度擅长任意形状、交错、非线性分布的数据二、超通俗小案例5个地点自动分两组有5个地点 A、B、C、D、E距离如下想分成两个“活动圈”。ABCDEA028109B20798C87023D109201E98310谱聚类怎么做建图把地点当“点”距离当“边权重”转相似度距离越近相似度越高建拉普拉斯矩阵记录点之间的连接关系特征分解把复杂数据投影到简单空间聚类在新空间里轻松分成两类结果组1A、B组2C、D、E三、谱聚类核心流程最标准 6 步构建相似度矩阵 W用高斯核RBF计算两点相似性wije−∥xi−xj∥22σ2w_{ij}e^{-\frac{\|x_i-x_j\|^2}{2\sigma^2}}wij​e−2σ2∥xi​−xj​∥2​构建度矩阵 D对角矩阵每个值是当前点所有相似度之和Dii∑jWijD_{ii}\sum_j W_{ij}Dii​∑j​Wij​构建拉普拉斯矩阵 L最常用对称归一化拉普拉斯LsymI−D−1/2WD−1/2L_{sym}I-D^{-1/2}WD^{-1/2}Lsym​I−D−1/2WD−1/2特征分解求 L 最小的 k 个特征值对应的特征向量。构建新特征空间把特征向量按行拼成新数据每行代表一个点。普通聚类在新空间里跑 K-Means得到最终簇。四、核心公式报告/作业直接用1. 相似度RBF 核wijexp⁡(−∥xi−xj∥22σ2)w_{ij} \exp\left(-\frac{\|x_i - x_j\|^2}{2\sigma^2}\right)wij​exp(−2σ2∥xi​−xj​∥2​)2. 度矩阵Dii∑j1nwijD_{ii} \sum_{j1}^n w_{ij}Dii​∑j1n​wij​3. 归一化拉普拉斯矩阵LsymI−D−1/2WD−1/2L_{sym} I - D^{-1/2}WD^{-1/2}Lsym​I−D−1/2WD−1/24. 聚类目标最小化归一化割NcutNcut(A1,...Ak)∑i1kCut(Ai,Ai‾)Vol(Ai)Ncut(A_1,...A_k) \sum_{i1}^k \frac{Cut(A_i,\overline{A_i})}{Vol(A_i)}Ncut(A1​,...Ak​)∑i1k​Vol(Ai​)Cut(Ai​,Ai​​)​五、为什么谱聚类这么强关键理解K-Means 假设簇是凸的、球形的谱聚类不假设形状只看图连接把非线性可分数据变成线性可分一句话谱聚类 用图论线性代数给数据“换一套坐标系”让复杂数据变简单。六、完整实战代码图像分割可直接复制运行谱聚类最经典应用图像分割把图片按颜色/位置分成区域。# 安装依赖# pip install numpy matplotlib scikit-learn scikit-imageimportnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.clusterimportSpectralClusteringfromskimageimportio,colorfromskimage.transformimportrescaleimportwarnings warnings.filterwarnings(ignore)# 1. 加载并缩小图片 image_urlhttps://upload.wikimedia.org/wikipedia/commons/thumb/a/a3/June_odd-eyed-cat.jpg/800px-June_odd-eyed-cat.jpgimageio.imread(image_url)imagerescale(image,0.2,multichannelTrue)# 缩小加速rows,cols,_image.shape# 2. 构造像素特征RGB 坐标 X[]foriinrange(rows):forjinrange(cols):r,g,bimage[i,j]X.append([r,g,b,i/rows,j/cols])Xnp.array(X)# 3. 谱聚类 n_clusters4scSpectralClustering(n_clustersn_clusters,affinityrbf,gamma10,random_state42)labelssc.fit_predict(X)# 4. 可视化结果 # 原图plt.figure(figsize(12,4))plt.subplot(131)plt.imshow(image)plt.title(Original Image)plt.axis(off)# 分割图seg_imgnp.zeros((rows,cols,3))colorsnp.random.rand(n_clusters,3)foriinrange(rows):forjinrange(cols):seg_img[i,j]colors[labels[i*colsj]]plt.subplot(132)plt.imshow(seg_img)plt.title(Segmented Image)plt.axis(off)# 边界图boundnp.zeros_like(seg_img)foriinrange(1,rows-1):forjinrange(1,cols-1):iflabels[i*colsj]!labels[i*colsj1]or\ labels[i*colsj]!labels[(i1)*colsj]:bound[i,j][1,0,0]plt.subplot(133)plt.imshow(bound)plt.title(Boundary)plt.axis(off)plt.tight_layout()plt.show()代码输出三张图原始图像谱聚类分割图区域边界图七、谱聚类优缺点面试/报告必背✅ 优点擅长非线性、任意形状簇高维数据表现好只需相似度矩阵可自定义相似规则数学优美、理论稳定❌ 缺点计算慢 O(n³)大数据不行内存占用大n×n 矩阵对参数敏感gamma、核函数需要指定簇数 k八、适用场景什么时候用 首选谱聚类数据形状不规则月牙、环形、交错小规模高维数据图像分割、视频分割、图节点聚类社交网络、文本聚类、特征学习 不要用数据量 1万 → 用 K-Means / Mini-Batch K-Means带噪声、密度不均 → 用 DBSCAN不知道簇数 → 用 Mean Shift / 层次聚类九、一句话总结谱聚类是基于图论与特征分解的高级聚类算法擅长处理K-Means无法解决的非线性、复杂形状数据是机器学习、图像处理、数据挖掘中最强大的聚类工具之一。

更多文章