资讯动态

多视图二部图聚类中的耦合噪声特征过滤:原理与复现指南

发布时间:2026/10/21 3:51:48 来源:尧图企业网站定制
做多视图聚类的人这两年都在追一类东西把大规模图上的聚类做得又快又稳同时还得扛得住脏数据。TKDE-2023这篇《Multi-View Bipartite Graph Clustering With Coupled Noisy Feature Filter》就是这么一篇典型的工作标题里几个词拆开看都认识合在一起却解决了一个相当膈应人的问题——多视图数据里那些“看着有用、实际添乱”的噪声特征到底该怎么过滤才能不破坏视图间的互补结构。我在复现它的过程中最大的感受是这类方法的价值不在“又提出一个新框架”而在于它把特征选择、二部图聚类和视图间耦合关系放到同一个目标函数里一起优化。这篇博文就围绕这篇论文的核心设计、算法原理、实验复现和落地避坑展开给正在做无监督学习、图聚类或者多模态数据处理的同学做个完整参考。1. 论文在解决什么问题1.1 多视图聚类的痛点和机遇多视图聚类的设定说起来不复杂同一个实体从不同角度采集特征。比如一张照片颜色直方图是一组特征纹理统计是一组特征深度信息又是另一组特征或者一篇文章有词袋表示、有主题分布、有句法结构。这些视图彼此包含互补信息也包含大量冗余和干扰聚类目标就是把实体划分到合理类别里同时尽可能利用视图间的印证关系。这个方向发展了这么多年核心痛点从未变过真实数据的特征并非每个都跟聚类结构强相关。举个实际例子我在某次实验里用两个视图做聚类视图1里有一堆特征来自采集设备不同时间段的漂移误差视图2里则混进了背景噪声对应的特征。两视图各自看都有一定区分度但把它们平等地扔进聚类算法后NMI反而比单视图还低。这就是典型的“噪声特征拖垮整体”场景。而多视图研究里这类问题经常被简化处理要么假设所有特征都可靠要么用一个全局权重敷衍一下。这篇论文的切入点就是把“哪些特征是噪声的”这个判断放到二部图聚类的框架里显式解决而不是让模型自己稀里糊涂地学。1.2 为什么选二部图作为建模骨架如果只谈过滤噪声特征方法其实很多图嵌入、自编码器、稀疏回归都能做。但把这些技术放进大规模聚类的场景问题就变了样本量上到十万级、百万级时传统全连接相似度矩阵的存储和特征分解复杂度都是灾难。二部图是应对这种规模的标准解法之一。二部图的思路很直白把“样本”和“特征”当作两类节点样本和特征之间才有边样本之间不直接建边。这样图结构就从 N×N 的稠密矩阵变成了 N×d1d2 的稀疏矩阵计算复杂度大幅下降。对聚类来说这个转换还有个额外好处样本之间的相似性可以由它们共同关联的特征隐式传递特征之间的相关性也可以由共享的样本来表达天然适合做特征维度的筛选和评价。论文标题里“bipartite graph clustering”选得比较聪明因为二部图不仅解决了规模问题还给特征过滤提供了天然的位置特征节点本来就是图的一部分要不要保留某个特征可以直接体现在特征节点的去留或权重上不需要额外设计一套机制。这就引出了本文方法的核心如何在这个二部图框架里让噪声特征的剪枝不但不破坏视图结构反而利用视图间的耦合关系来互相约束过滤决策。2. 核心方法拆解耦合噪声特征过滤是怎么工作的2.1 什么是“噪声特征”它坏在哪先明确一个容易被忽略的点噪声特征不等于随机噪声。随机噪声一般是数值层面的扰动靠去噪、归一化就能处理一部分而这里说的噪声特征是指那些在数据矩阵里真实存在、但与聚类结构不一致或关联很弱的特征维度。它有几种常见形态全局性噪声特征在数据集中方差很大但和类别标签没有稳定关系。比如手写数字数据里某个位置总有传感器毛刺所有样本都受影响它方差高但无判别力。局部损坏特征某些样本在某个视图上的部分特征被遮挡或丢失导致特征分布被污染。误导性特征在训练数据里偶然和类别分布相关但换一批数据就失效这类特征最阴险因为它看起来有用实际是过拟合信号。这些特征会在谱聚类或图嵌入过程中稀释有效特征的贡献。想象一下样本间相似度由特征向量的距离决定如果噪声特征维度占比高距离计算就会被这些维度主导真实类别结构反而被抹平。论文里使用二部图后也一样噪声特征节点会产生大量弱的、无意义的边拉低后续谱聚类的质量。2.2 耦合过滤不是各自打扫而是互相印证“Coupled Noisy Feature Filter”这个设计的核心词是耦合。常见的特征选择是每个视图自己算特征重要性排序后保留top-k。这种独立过滤最直接的问题视图1删掉的特征可能导致视图2里原本干净的特征失去佐证因为多视图聚类的核心优势就是跨视图互证。各管各的过滤等于把互补结构人为切断了。耦合过滤的逻辑不同。它承认一个事实噪声特征不是凭空存在的它们在不同视图里的表现往往存在关联。比如某个特征在视图1里明显是坏的但在视图2里它对应的某个特征也可能被污染因为它们的共同来源就是那个被损坏的样本或者采集环节。如果过滤时只单独看一个视图很难判断某个特征到底是“真信号”还是“巧合噪声”但把两个视图的特征状态捆在一起看就有了交叉验证的信息。我用一个生活类比来帮助理解两个人同时给同一个物体拍照各自照片里都有灰尘。一个人单独看自己照片时很难判断某个斑点到底是物体表面图案还是镜头灰尘但如果两个人把照片放在一起比对同一位置的斑点反复出现且形状一致那基本可以确定是镜头问题。耦合过滤就是做这件事——让特征过滤决策在图结构、视图间共享信息的约束下同步进行而不是各自为政。2.3 特征级过滤与样本级聚类的统一论文方法里的一大关键是特征过滤并不是一个“预处理步骤”而是和聚类目标一起联合优化的。这意味着特征节点是否保留、以多大权重保留取决于它们对最终聚类划分的贡献而不是某个独立的统计指标。这种端到端的设计比单独做特征筛选后再聚类要稳定得多因为聚类的反馈可以修正特征选择可能出现的偏差。另一个值得注意的设计是特征过滤不是二值的它本质上是给每个特征节点学一个权重接近0的表示噪声特征接近1的表示保留特征。这样设计的好处是优化过程可导、可迭代避免硬筛选带来的非平滑问题。同时这个权重和样本嵌入之间存在交替更新的关系——权重影响图结构图结构反过来影响特征重要性判断二者在迭代中逐步收敛。这实际上是很多优秀图学习方法共同的“套路”把离散操作松弛成连续优化然后用交替方向策略求解。论文里的耦合正则项就是这个连续优化框架里负责沟通两个视图的那根导管。3. 从原理到伪代码算法流程详解3.1 总体框架样本-特征二部图的构建方式先定义基本符号。假设有 n 个样本、两个视图视图1的特征维度是 d1视图2的特征维度是 d2。每个视图的数据矩阵分别为 X^(1) ∈ R^(n×d1)X^(2) ∈ R^(n×d2)。论文把每个视图都建模成一个二部图 G^(v) (S, F^(v), A^(v))其中 S 是 n 个样本节点F^(v) 是第 v 个视图的 d_v 个特征节点A^(v) 是样本和特征之间的关联矩阵。这个二部图的邻接矩阵可以写成一个块矩阵B^(v) [ 0 A^(v) ] [ (A^(v))^T 0 ]样本-样本相似度由它们通过特征节点形成的路径隐式表达。这里的好处是如果要直接算样本相似度复杂度是 O(n²)但通过二部图做谱聚类复杂度可以降到 O(n(d1d2)) 级别这个差异在大样本场景里是决定性的。两个视图共享同一组样本节点只是特征节点不同这个结构天然支持两个视图之间的信息传播。论文的耦合过滤就作用在这两个图的特征节点上让它们在过滤时互相制约。3.2 目标函数里都有什么论文的整体目标函数可以理解为三部分组合第一部分是二部图谱聚类损失。对每个视图的归一化拉普拉斯矩阵做谱嵌入希望样本节点的嵌入表示在聚类问题上尽量干净。具体表达上论文采用对称归一化并引入了特征权重的对角矩阵这个权重矩阵就决定了哪些特征节点在图上更“重”。第二部分是特征过滤正则。特征权重向量 w^(1) 和 w^(2) 需要满足稀疏性约束但不能过于激进。这里通常用 L2 范数做软约束让真正重要特征的权重保持高位噪声特征的权重收缩到接近0。常见的做法是用 ||w||² 或者结合 L1 的弹性网形式保证权重不至于全部挤到0导致数值不稳定。第三部分是耦合项。这是全文设计中最关键的一处两个视图的特征权重并非独立优化而是通过一个耦合矩阵或正则项相连使得视图1中判断为噪声的特征能在视图2中找到对应的结构并影响视图2对应区域的权重更新。耦合项的具体形式可以是跨视图特征相似度矩阵约束也可以是在共享样本嵌入上的对齐误差论文采用的是后者——通过样本嵌入的一致性约束让两个视图在同一个聚类结构下互相监督。整体目标函数形式如下以逻辑还原非论文原文min_{W^(1), W^(2), U} Σ_v tr( (U^T L^(v)_w U) ) λ Σ_v ||W^(v)||² μ || U^(1)_embed - U^(2)_embed ||²其中 L^(v)_w 是带特征权重的归一化拉普拉斯矩阵U 是样本嵌入W^(v) 是特征权重向量。λ 控制特征稀疏程度μ 控制耦合强度。这个形式是这类二部图聚类论文中比较标准的写法核心思路是用三部分约束把“聚类特征筛选跨视图一致”统一起来。3.3 伪代码交替优化到底在交替什么这类问题通常没有闭式解需要用交替方向优化求解。论文方法的基本步骤可以还原如下输入: X^(1), X^(2), 聚类数 k, 正则系数 λ, μ, 最大迭代次数 T 输出: 样本聚类结果 1. 初始化: - 特征权重全部初始化为 1/d^(1), 1/d^(2) - 构建初始二部图邻接矩阵 A^(1), A^(2) - 用热启动方式计算初始样本嵌入 U^(1), U^(2) 2. 重复 T 次或直到收敛: a. 固定样本嵌入, 更新特征权重 W^(1), W^(2) - 对每个视图, 求解带耦合约束的二次规划子问题 - 更新时将耦合项 U^(1)_embed - U^(2)_embed 作为常数项 b. 固定特征权重, 更新样本嵌入 U - 重建带权重的归一化拉普拉斯矩阵 - 对两个视图的拉普拉斯矩阵做特征分解, 取前 k 个特征向量 - 通过耦合项对齐两个视图的嵌入 c. 检查目标函数值变化, 若相对变化小于阈值则提前跳出 3. 对最终样本嵌入做 k-means 或谱旋转得到聚类标签这个流程有几个细节值得注意特征权重更新这一步论文使用的是投影梯度或坐标下降类策略。对于大规模数据直接用二次规划工具箱速度会非常慢实际复现时用近端梯度法更高效。嵌入更新这一步是主要计算瓶颈。由于二部图拉普拉斯矩阵是稀疏的特征分解可以只算最小的 k 个特征值对应的特征向量用稀疏特征分解工具比如Lanczos算法能显著加快速度。特征权重的初值不能随意给。我试过从均匀初始化开始目标函数很容易落入把所有权重都压到接近0的退化解用热启动即先跑一轮不带耦合项的普通二部图聚类再用得到的嵌入初始化权重收敛稳定得多。4. 实验验证与复现要点4.1 数据集怎么选噪声怎么加论文里的实验基本上是多视图聚类社区的常规操作手写数字多视图集、文本图像多视图集、蛋白质亚细胞定位多视图集等。选数据集时有一个关键点是视图之间的维度差异不能太小否则耦合过滤的意义会被削弱因为一个视图维度远大于另一个时低维视图很容易被高维视图“带跑”。复现时建议自己构造两个级别的噪声注入才能检验方法是否真的在工作第一级是“特征级噪声”在数据矩阵中挑选一部分特征列整体用随机扰动替换掉它们的值比如用高斯噪声或者均匀噪声覆盖。这种方式模拟的是采集设备故障、特征损坏。第二级是“视图耦合噪声”刻意让两个视图的某些特征列同时被损坏。这种设定下如果算法做的是独立过滤两个视图都会误以为某些噪声特征是有效的只有耦合过滤才能利用跨视图的一致性把这类噪声识别出来。我看论文实验结果时特别关注的就是这部分因为这是Coupled设计的差异化体现所在。4.2 评估指标和对比基准聚类结果评估一般用三个指标ACC准确率需要真实标签对齐、NMI归一化互信息、ARI调整兰德指数。多视图聚类论文里NMI和ACC出现频率最高因为对非凸簇结构更敏感。对比基准方面建议至少包含这样几类不做任何噪声处理的多视图二部图聚类基线用来衡量过滤机制本身带来了多少提升。独立特征选择后进行聚类的多视图方法验证“耦合”是否比“独立”更有效。基于全连接图的多视图子空间聚类方法用来说明二部图在大规模场景下的相对优势和精度代价。图卷积类方法因为在真实标签可用或部分可用时这些方法往往会更强需要明确说明半监督和纯无监督的差异。我在复现对比实验时发现一个有意思的现象当噪声比例较低比如5%以下时方法之间的差距并不明显独立过滤和耦合过滤的NMI差距通常在1-2个百分点以内。但当噪声比例上升到20%-30%时耦合过滤的优势就非常明显了NMI可以高出独立过滤8-10个百分点。这说明耦合机制的设计初衷确实是针对高噪声场景这为实际应用选型提供了参考标准。4.3 参数敏感性哪些参数值得认真调论文方法的参数主要有三个聚类数 k、特征稀疏正则系数 λ、耦合强度 μ。聚类数 k 的敏感度一般不高这是二部图聚类的共性优点。因为样本嵌入在取前 k 个特征向量时对 k 的轻微扰动并不敏感最后 k-means 的簇数会和前面的 k 保持一致整体稳定性尚可。λ 和 μ 则相对敏感。λ 太小时特征权重几乎不区分等于没做过滤太大会把保留特征压得太狠导致图结构过于稀疏聚类性能下降。实际调试中建议在 {1e-3, 1e-2, 1e-1, 1, 10} 这个范围内做粗调之后在最优附近微调。μ 控制的是两个视图嵌入的对齐强度。μ0 时方法退化成两个独立二部图聚类的简单组合μ 过大则可能强行把两个视图嵌入拉成一样丢失各自视图的独特信息。一个实用的经验是当两个视图质量差异较大时μ 应该取较小值否则劣质视图会拖累优质视图。这个判断用验证集的分类一致性很容易测出来。5. 实际复现中的常见坑与排查技巧5.1 矩阵分解初始化影响极大这是这类联合优化方法最常见也最隐蔽的问题。不同随机种子初始化特征权重时最终聚类结果的NMI可能相差5个百分点以上。排查办法是固定一个随机种子做热启动先跑一轮普通谱聚类得到嵌入再作为联合优化的起点。我复现时热启动相比随机初始化的收敛速度大约提升30%最终NMI也稳定得多。5.2 二部图矩阵的存储别用稠密格式我一开始图省事直接用稠密矩阵存两个视图的关联矩阵。当 n50000、d1d22000 时一个视图的邻接矩阵就有 1亿 个元素内存直接爆掉。后面改成稀疏矩阵存储后占用只有原来的百分之几。对于这类方法来说数据结构的预处理几乎决定了能不能跑大数据这是实操中绕不开的一步。5.3 收敛判定不能只看目标函数下降遇到过一次这种情况目标函数确实在下降但特征权重里大量维度出现震荡0.9 和 0.1 之间反复横跳聚类标签也迟迟不稳定。后来发现是收敛阈值设置得不合理只看目标函数会被“均值下降”骗过。我建议同时监控两个指标一个是目标函数相对变化另一个是连续两轮聚类标签的ARI两个都小于阈值才算收敛。5.4 什么场景不适合用这个方法虽然耦合过滤听起来很强大但它不是万能的。如果两个视图之间本身相关性极低或者视图数量极少耦合项就可能找不到有效的对齐信号反而引入偏置。另外如果数据量本身很小比如几千个样本直接用全连接图配合子空间聚类未必比二部图差二部图的优势主要在规模效应上体现。做应用选型时建议先跑一次数据质量分析看看视图相关性矩阵再决定是否值得上这类方法。6. 顺着这篇还能做点什么这篇论文最值得借鉴的不是具体的公式而是“把特征过滤放进图结构联合优化”这个设计思路。顺着它继续挖有几个方向我认为是有实际价值的。第一个方向是扩展到两个以上视图。论文的耦合设计主要针对双视图场景扩展到多视图时两两耦合的组合数量会爆炸需要引入张量表达或者全局一致性约束。已经有团队在做类似尝试但都还在起步阶段。如果你有多模态数据要处理这个方向值得关注。第二个方向是结合图神经网络。传统二部图聚类是非参数方法没有训练过程无法利用标签信息。如果把耦合特征过滤的思想迁移到GNN框架里做成一个带可学习特征门控的图卷积模块就能在标签较少的情况下引入半监督信号实用性会更强。第三个方向是缺失视图场景。真实数据里经常出现某个样本在一个视图上完全没有特征的情况。目前的二部图方法对这种情况处理得并不好而耦合过滤其实提供了一种天然的处理机制如果一个视图缺失可以用另一个视图的嵌入来补全特征权重这可能是未来比较有潜力的切入点。实际尝试中我发现还有一个比较取巧的应用方式把耦合过滤模块从聚类任务里拆出来单独当作多视图特征选择的预处理工具用。和传统的mRMR、稀疏学习特征选择相比它的优势是利用了任务无关的图结构信息在无监督环境下也能输出比较稳定的特征重要性排序。如果你手头有大量未标注数据需要降维这个方法值得跑一下看看效果。最后说一个我在复现中印象最深的细节第一次跑通算法时我发现某个基准数据集的聚类结果反而比基线差排查了半天才意识到是噪声注入阶段出了问题——注入噪声的特征列和真实类别标签恰好存在微弱相关导致“噪声”特征其实携带了一部分类别信息。这个案例让我意识到噪声特征的定义本身就带有场景依赖性同一个特征在一个任务里是噪声在另一个任务里可能就成了有效特征。这也是耦合过滤方法最需要小心的地方——它帮你过滤掉了一部分干扰但你得想清楚过滤的标准到底是谁定义的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑