当前位置: 首页 > news >正文

SIAM-2011《Weighted Graph Compression for Parameter-free Clustering With PaCCo》


核心思想分析

论文提出了一种基于最小描述长度(Minimum Description Length, MDL)原理和二分k均值策略的无参数加权图聚类算法,命名为PaCCo(Parameter-free Clustering by Coding costs)。其核心思想是将图聚类问题转化为数据压缩问题,通过最小化编码成本(coding costs)来自动确定加权图中的聚类结构,而无需用户指定参数(如聚类数目 k k k)。PaCCo利用加权图中边的权重信息,结合MDL原理,通过递归的图分割和聚类过程,识别出高度互联且边权重相似的子图,从而实现高效、准确的聚类。

具体而言:

  • 数据压缩与MDL:MDL原理认为,一个好的聚类结构能够显著压缩图数据。通过量化图的编码成本,PaCCo将聚类问题转化为寻找编码成本最低的分区方案。
  • 加权图的处理:与传统的无权图聚类不同,PaCCo考虑边权重作为节点相似性的重要信息,避免了通过二值化或阈值化丢失权重信息。
  • 无参数与自动化:通过MDL作为终止准则,PaCCo自动确定聚类数目,无需用户干预,解决了传统算法(如谱聚类、Metis)需要预设参数的问题。
  • 递归二分策略:采用自顶向下的二分k均值策略,逐步分割图,直到进一步分割不再降低编码成本,从而保证计算效率和聚类质量。

目标函数分析

PaCCo的目标函数基于MDL原理,旨在通过最小化图分区的编码成本来优化聚类结构。目标函数由两部分组成:聚类成本和模型参数成本,形式化定义如下:

Model-Cost ( G ∣ C ) = ∑ l = 1 k c ( C l ) + c ( p ) \text{Model-Cost}(G \mid C) = \sum_{l=1}^k c(C_l) + c(p) Model-Cost(GC)=l=1kc(Cl)+c(p)

其中:

  • G G G:输入的加权无向图,包含节点集 V V V和边集 E E E
  • C = { C 1 , … , C k } C = \{C_1, \ldots, C_k\} C={C1,,Ck}:图的分区,包含 k k k个互不相交的聚类。
  • c ( C l ) c(C_l) c(Cl):第 l l l个聚类的编码成本,表示压缩该聚类子图所需的比特数。
  • c ( p ) c(p) c(p):存储聚类模型参数的成本,与聚类数目 k k k相关,用于校正模型复杂性。

每个聚类 C l C_l Cl的编码成本 c ( C l ) c(C_l) c(Cl)由节点 v i v_i vi在该聚类中的成本之和构成:

c ( C l ) = ∑ v i ∈ C l c ( v i ∣ C l ) c(C_l) = \sum_{v_i \in C_l} c(v_i \mid C_l) c(Cl)=viClc(viCl)

节点 v i v_i vi的成本 c ( v i ∣ C l ) c(v_i \mid C_l) c(viCl)进一步分为权重成本和连接成本:

c ( v i ∣ C l ) = c weights ( v i ∣ C l ) + c linkage ( v i ∣ C l ) c(v_i \mid C_l) = c_{\text{weights}}(v_i \mid C_l) + c_{\text{linkage}}(v_i \mid C_l) c(viCl)=cweights(viCl)+clinkage(viCl)

  1. 权重成本 c weights ( v i ∣ C l ) c_{\text{weights}}(v_i \mid C_l) cweights(viCl)

    • 假设聚类内边权重服从高斯分布(Gaussian Distribution, GD),以概率密度函数(PDF) f G D f_{GD} fGD表示,权重成本基于负对数似然:
      c weights ( v i ∣ C l ) = − log ⁡ 2 ( f G D ( v i ; μ C l , σ C l ) ) c_{\text{weights}}(v_i \mid C_l) = -\log_2 \left( f_{GD}(v_i; \mu_{C_l}, \sigma_{C_l}) \right) cweights(viCl)=log2(fGD(vi;μCl,σCl))
      其中,高斯分布定义为:
      f G D ( w i j ; μ C l , σ C l ) = 1 2 π σ C l 2 exp ⁡ ( − ( w i j − μ C l ) 2 2 σ C l 2 ) f_{GD}(w_{ij}; \mu_{C_l}, \sigma_{C_l}) = \frac{1}{\sqrt{2\pi \sigma_{C_l}^2}} \exp\left(-\frac{(w_{ij} - \mu_{C_l})^2}{2\sigma_{C_l}^2}\right) fGD(wij;μCl,σCl)=2πσCl2 1exp(2σCl2(wijμCl)2)
      对于节点 v i v_i vi,权重成本考虑其与聚类内所有节点的边权重:
      f G D ( v i ; μ C l , σ C l ) = 1 ∣ C l ∣ ∑ v j ∈ C l 1 2 π σ C l 2 exp ⁡ ( − ( w i j − μ C l ) 2 2 σ C l 2 ) f_{GD}(v_i; \mu_{C_l}, \sigma_{C_l}) = \frac{1}{|C_l|} \sum_{v_j \in C_l} \frac{1}{\sqrt{2\pi \sigma_{C_l}^2}} \exp\left(-\frac{(w_{ij} - \mu_{C_l})^2}{2\sigma_{C_l}^2}\right) fGD(vi;μCl,σCl)=Cl1vjCl2πσCl2 1exp(2σCl2(wijμCl)2)
      其中, μ C l \mu_{C_l} μCl σ C l \sigma_{C_l} σCl分别是聚类 C l C_l Cl内边权重的均值和标准差。
  2. 连接成本 c linkage ( v i ∣ C l ) c_{\text{linkage}}(v_i \mid C_l) clinkage(viCl)

    • 连接成本衡量节点 v i v_i vi与聚类内和聚类外的连接情况,鼓励聚类内边最大化,聚类间边最小化:
      c linkage ( v i ∣ C l ) = − 0.5 log ⁡ 2 ( ∣ e i , j ′ ∣ ) + 0.5 log ⁡ 2 ( ∣ e i , j ′ ′ ∣ ) c_{\text{linkage}}(v_i \mid C_l) = -0.5 \log_2 \left( |e_{i,j'}| \right) + 0.5 \log_2 \left( |e_{i,j''}| \right) clinkage(viCl)=0.5log2(ei,j)+0.5log2(ei,j′′)
      其中, ∣ e i , j ′ ∣ |e_{i,j'}| ei,j v i v_i vi与聚类 C l C_l Cl内节点的边数, ∣ e i , j ′ ′ ∣ |e_{i,j''}| ei,j′′ v i v_i vi与所有节点的总边数(包括聚类外)。

目标函数的设计目标是通过最小化 Model-Cost ( G ∣ C ) \text{Model-Cost}(G \mid C) Model-Cost(GC),实现高度互联且边权重相似的子图分区,同时通过 c ( p ) c(p) c(p)控制聚类数目,避免过拟合。


目标函数的优化过程

PaCCo采用自顶向下的二分k均值策略,通过递归分割图来优化目标函数。优化过程包括以下步骤:

  1. 初始化

    • 输入加权无向图的邻接矩阵 A A A,初始化整个图为一个聚类,使用 k = 1 k=1 k=1 k k k-PaCCo计算初始编码成本,提供优于随机的初始聚类。
  2. 递归分割(splitClusters)

    • 对每个聚类 C l C_l Cl,尝试将其分割为两个子聚类( k = 2 k=2 k=2),使用 k k k-PaCCo算法。
    • 初始化两个子聚类的权重分布:基于当前聚类 C l C_l Cl的高斯分布参数 μ C l \mu_{C_l} μCl σ C l \sigma_{C_l} σCl,将子聚类的均值设置为 μ C l + σ C l \mu_{C_l} + \sigma_{C_l} μCl+σCl μ C l − σ C l \mu_{C_l} - \sigma_{C_l} μClσCl,标准差为 σ C l / 2 \sigma_{C_l}/2 σCl/2,以引导非随机的分割。
    • 计算分割后的编码成本 Model-Cost ( G l split ∣ C l split ) \text{Model-Cost}(G_{l_{\text{split}}} \mid C_{l_{\text{split}}}) Model-Cost(GlsplitClsplit),与当前聚类的成本 Model-Cost ( G l ∣ C l ) \text{Model-Cost}(G_l \mid C_l) Model-Cost(GlCl)比较:
      Model-Cost ( G l split ∣ C l split ) < Model-Cost ( G l ∣ C l ) \text{Model-Cost}(G_{l_{\text{split}}} \mid C_{l_{\text{split}}}) < \text{Model-Cost}(G_l \mid C_l) Model-Cost(GlsplitClsplit)<Model-Cost(GlCl)
      • 若成本降低,接受分割,继续递归处理子聚类。
      • 若成本不降低,保留当前聚类,停止分割。
  3. k-PaCCo聚类

    • 重新分配步骤:对每个节点 v i v_i vi,计算其在每个候选聚类 C l C_l Cl中的成本 c ( v i ∣ C l ) c(v_i \mid C_l) c(viCl),将其分配到成本最低的聚类:
      C new ( v i ) = arg ⁡ min ⁡ C l ∈ C c ( v i ∣ C l ) C_{\text{new}}(v_i) = \arg\min_{C_l \in C} c(v_i \mid C_l) Cnew(vi)=argClCminc(viCl)
    • 更新步骤:更新每个聚类的权重分布参数 μ C l \mu_{C_l} μCl σ C l \sigma_{C_l} σCl
      μ C l = ∑ w i , j n , ∀ v i , v j ∈ C l , v i ≠ v j \mu_{C_l} = \frac{\sum w_{i,j}}{n}, \quad \forall v_i, v_j \in C_l, v_i \neq v_j μCl=nwi,j,vi,vjCl,vi=vj
      σ C l \sigma_{C_l} σCl类似更新。
    • 迭代重新分配和更新步骤,直到聚类分配不再变化或达到最大迭代次数。
  4. 终止条件

    • 当所有聚类的进一步分割不再降低编码成本时,算法终止,返回最终聚类结果 V V V,其中 k = ∣ V ∣ k=|V| k=V为自动确定的聚类数目。

优化过程通过MDL原理自动平衡聚类质量和模型复杂性,确保高效且准确的聚类。


主要贡献点

  1. 无参数设计:PaCCo无需用户指定聚类数目 k k k或社区数量等参数,通过MDL原理自动确定最优聚类数目,解决了传统算法(如谱聚类、Metis)依赖参数的问题。
  2. 全自动化:基于MDL的终止准则,PaCCo无需用户干预即可完成聚类,适用于未知结构的加权图。
  3. 高效性:采用自顶向下的二分策略,PaCCo在保持高聚类精度的同时,运行时间与参数依赖的算法(如Metis、MCL)相当,比无参数的谱聚类(SpectralZM)快约70倍。
  4. 加权图处理:通过考虑边权重信息,PaCCo能够捕捉更丰富的节点相似性信息,相比忽略权重的算法(如Cross-Association)更适合加权图。
  5. 生物学应用:在蛋白质交互网络等真实数据集上,PaCCo展示了更高的模块性(modularity)和生物学意义,揭示了功能相关的聚类。

实验结果分析

论文通过合成数据和真实数据集(蛋白质交互网络)评估了PaCCo的性能,与三种现有加权图聚类算法(Metis、MCL、SpectralZM)进行了比较。实验结果如下:

  1. 合成数据实验

    • 实验设置
      • 生成了具有高斯、均匀和拉普拉斯分布边权重的合成加权图,包含1000个节点, k = 20 k=20 k=20个聚类,每个聚类50个节点,约70%为聚类内边(约17,000条边)。
      • 进行了三组实验:
        1. 增加噪声边(0至20,000条),测试算法对噪声的鲁棒性。
        2. 改变聚类权重均值间隔(从所有均值相等到均值间隔为1至20),测试对权重分布的适应性。
        3. 改变聚类数目 k k k(10至100),测试对数据规模的适应性。
      • 使用调整互信息(Adjusted Mutual Information, AMI)评估聚类性能,AMI值为1表示完美聚类,0表示随机聚类。
    • 结果
      • 噪声边实验(图4):PaCCo在所有噪声水平下均优于Metis、MCL和SpectralZM,即使在噪声边达到20,000条时仍保持较高AMI。MCL对噪声敏感,SpectralZM波动大,Metis在拉普拉斯分布数据上表现稍差。
      • 权重间隔实验(图5):PaCCo在所有分布(高斯、均匀、拉普拉斯)上均取得最高AMI,尤其在拉普拉斯分布上优势明显,表明其对不同权重分布的适应性。Metis在高斯和均匀分布上表现较好,但在拉普拉斯分布上较差;MCL和SpectralZM表现较差(AMI在0至0.5)。
      • 聚类数目实验(图6):PaCCo在不同 k k k值下均保持稳定的高AMI,优于其他算法。Metis在高斯和均匀分布上表现良好,但在拉普拉斯分布上较差;MCL仅在均匀分布大 k k k值时表现较好;SpectralZM整体表现不佳。
    • 结论:PaCCo在噪声鲁棒性、权重分布适应性和数据规模扩展性上均优于对比算法,尤其在非高斯分布(如拉普拉斯)上表现出色。
  2. 运行时间实验(图7):

    • 测试了 k k k从10到100的运行时间,PaCCo的超线性时间复杂度(远低于SpectralZM的 O ( n 3 ) O(n^3) O(n3))使其在5000节点图上仅需14.1秒,而SpectralZM需16.8分钟,PaCCo快约70倍。PaCCo比MCL快,略慢于Metis,但无需参数调整,综合效率更高。
  3. 真实数据实验(图8):

    • 使用Costanzo等人[4]的酵母蛋白质交互网络(1139个节点),边权重基于基因双敲除实验的生长率变化(±0.15)。
    • 评估指标为加权模块性(weighted modularity),并通过基因本体(Gene Ontology, GO)数据库计算聚类的生物学意义。
    • 结果
      • PaCCo自动识别11个聚类,模块性最高,且在两个分子功能(水解酶活性、异构酶活性)上显著富集( p < 0.05 p<0.05 p<0.05 p < 0.01 p<0.01 p<0.01)。
      • Metis( k = 3 k=3 k=3)在水解酶活性上富集,但未发现异构酶活性。MCL( k = 1121 k=1121 k=1121,几乎全是单节点聚类)和SpectralZM( k = 3 k=3 k=3)未发现显著富集。
      • PaCCo的聚类结果在生物学意义上更丰富,揭示了并行功能路径的存在(如水解酶和异构酶活性)。
  4. 总结

    • PaCCo在合成数据上展示了优越的聚类精度和鲁棒性,在真实蛋白质网络上取得了最高的模块性和生物学意义,优于Metis、MCL和SpectralZM。
    • PaCCo的无参数和高效特性使其在实际应用中更具优势,尤其适用于未知聚类数目的加权图。

算法实现过程详解

PaCCo算法的实现结合了二分k均值策略和MDL原理,通过递归分割图并优化编码成本实现聚类。以下是详细的实现步骤:

1. 算法输入
  • 输入:加权无向图的邻接矩阵 A A A,其中 a i , j = w i , j a_{i,j} = w_{i,j} ai,j=wi,j(若边 e i , j ∈ E e_{i,j} \in E ei,jE存在),否则 a i , j = 0 a_{i,j} = 0 ai,j=0。对角线元素 a i , i = 0 a_{i,i} = 0 ai,i=0(无自环)。
  • 输出:最终聚类结果 V V V,包含 k k k个互不相交的聚类, k k k由算法自动确定。
2. 主算法(Algorithm 1: PaCCo)
  • 初始化
    • 调用 k k k-PaCCo( k = 1 k=1 k=1)计算整个图的初始编码成本,获取优于随机的初始聚类 C init C_{\text{init}} Cinit
    • 初始化最终聚类结果 V = [ ] V = [] V=[]
  • 递归分割
    • 调用splitClusters函数,以 C init C_{\text{init}} Cinit A A A为输入,递归分割图,直到满足终止条件。
    • 返回 V V V,其中 k = ∣ V ∣ k = |V| k=V为最终聚类数目。
3. k-PaCCo子例程(Algorithm 2: k-PaCCo)
  • 输入:聚类数目 k k k(通常 k = 2 k=2 k=2,用于二分),邻接矩阵 A A A,初始高斯分布参数 μ \mu μ σ \sigma σ
  • 初始化
    • 随机分配节点到 k k k个聚类,或使用启发式初始化(基于权重分布)。
  • 迭代过程
    • 重新分配
      • 对每个节点 v i v_i vi,计算其在每个聚类 C l C_l Cl中的成本 c ( v i ∣ C l ) c(v_i \mid C_l) c(viCl)
        c ( v i ∣ C l ) = c weights ( v i ∣ C l ) + c linkage ( v i ∣ C l ) c(v_i \mid C_l) = c_{\text{weights}}(v_i \mid C_l) + c_{\text{linkage}}(v_i \mid C_l) c(viCl)=cweights(viCl)+clinkage(viCl)
        其中:
        • 权重成本:
          c weights ( v i ∣ C l ) = − log ⁡ 2 ( 1 ∣ C l ∣ ∑ v j ∈ C l 1 2 π σ C l 2 exp ⁡ ( − ( w i j − μ C l ) 2 2 σ C l 2 ) ) c_{\text{weights}}(v_i \mid C_l) = -\log_2 \left( \frac{1}{|C_l|} \sum_{v_j \in C_l} \frac{1}{\sqrt{2\pi \sigma_{C_l}^2}} \exp\left(-\frac{(w_{ij} - \mu_{C_l})^2}{2\sigma_{C_l}^2}\right) \right) cweights(viCl)=log2 Cl1vjCl2πσCl2 1exp(2σCl2(wijμCl)2)
        • 连接成本:
          c linkage ( v i ∣ C l ) = − 0.5 log ⁡ 2 ( ∣ e i , j ′ ∣ ) + 0.5 log ⁡ 2 ( ∣ e i , j ′ ′ ∣ ) c_{\text{linkage}}(v_i \mid C_l) = -0.5 \log_2 \left( |e_{i,j'}| \right) + 0.5 \log_2 \left( |e_{i,j''}| \right) clinkage(viCl)=0.5log2(ei,j)+0.5log2(ei,j′′)
      • v i v_i vi分配到成本最低的聚类:
        C new ( v i ) = arg ⁡ min ⁡ C l ∈ C c ( v i ∣ C l ) C_{\text{new}}(v_i) = \arg\min_{C_l \in C} c(v_i \mid C_l) Cnew(vi)=argClCminc(viCl)
    • 更新
      • 更新每个聚类的权重分布参数:
        μ C l = ∑ w i , j n , ∀ v i , v j ∈ C l , v i ≠ v j \mu_{C_l} = \frac{\sum w_{i,j}}{n}, \quad \forall v_i, v_j \in C_l, v_i \neq v_j μCl=nwi,j,vi,vjCl,vi=vj
        σ C l \sigma_{C_l} σCl类似计算。
    • 终止条件:聚类分配不再变化或达到最大迭代次数。
  • 输出 k k k个聚类的分配结果。
4. 分割策略(Algorithm 3: splitClusters)
  • 输入:当前聚类分区 C C C,邻接矩阵 A A A,最终聚类结果 V V V
  • 过程
    • 对每个聚类 C l ∈ C C_l \in C ClC
      • C l C_l Cl包含多于一个节点或 k < ∣ A l ∣ k < |A_l| k<Al,尝试二分:
        • 初始化两个子聚类的高斯分布参数:
          μ ′ = [ μ C l + σ C l , μ C l − σ C l ] , σ ′ = [ σ C l / 2 , σ C l / 2 ] \mu' = [\mu_{C_l} + \sigma_{C_l}, \mu_{C_l} - \sigma_{C_l}], \quad \sigma' = [\sigma_{C_l}/2, \sigma_{C_l}/2] μ=[μCl+σCl,μClσCl],σ=[σCl/2,σCl/2]
        • 调用 k k k-PaCCo( k = 2 k=2 k=2)生成子聚类 C l split C_{l_{\text{split}}} Clsplit
        • 计算分割后的编码成本 Model-Cost ( G l split ∣ C l split ) \text{Model-Cost}(G_{l_{\text{split}}} \mid C_{l_{\text{split}}}) Model-Cost(GlsplitClsplit),与当前成本比较:
          • 若成本降低,递归调用splitClusters处理子聚类。
          • 否则,将 C l C_l Cl加入 V V V,停止分割。
      • C l C_l Cl为单节点或无法进一步分割,将 C l C_l Cl加入 V V V
  • 输出:更新后的 V V V
5. 编码成本计算
  • 聚类成本:对每个聚类 C l C_l Cl,计算所有节点 v i v_i vi的成本总和:
    c ( C l ) = ∑ v i ∈ C l ( c weights ( v i ∣ C l ) + c linkage ( v i ∣ C l ) ) c(C_l) = \sum_{v_i \in C_l} \left( c_{\text{weights}}(v_i \mid C_l) + c_{\text{linkage}}(v_i \mid C_l) \right) c(Cl)=viCl(cweights(viCl)+clinkage(viCl))
  • 参数成本:存储每个聚类的 μ C l \mu_{C_l} μCl σ C l \sigma_{C_l} σCl,以浮点精度编码,成本 c ( p ) c(p) c(p) k k k成正比。
  • 总成本
    Model-Cost ( G ∣ C ) = ∑ l = 1 k c ( C l ) + c ( p ) \text{Model-Cost}(G \mid C) = \sum_{l=1}^k c(C_l) + c(p) Model-Cost(GC)=l=1kc(Cl)+c(p)
6. 终止与输出
  • 算法在所有聚类无法进一步分割(即分割不降低成本)时终止。
  • 输出最终聚类 V V V,其中 k = ∣ V ∣ k = |V| k=V为自动确定的聚类数目。
7. 实现细节
  • 数据结构:使用邻接矩阵存储图,便于快速访问边权重。
  • 启发式初始化:通过权重分布的均值和标准差引导子聚类初始化,避免随机初始化的低效。
  • 优化策略:递归二分和k均值迭代确保高效收敛,同时MDL原理自动平衡聚类数目和质量。
  • 编程实现:论文中提到PaCCo用Java实现,运行在2.9GHz Windows计算机上,内存3GB。

总结

PaCCo通过将加权图聚类问题转化为数据压缩问题,结合MDL原理和二分k均值策略,实现了无参数、自动化的高效聚类。其目标函数通过最小化编码成本优化聚类结构,考虑边权重和连接性,优化过程通过递归分割和迭代更新实现。实验证明PaCCo在合成和真实数据上优于Metis、MCL和SpectralZM,运行时间显著优于无参数的SpectralZM。算法的实现清晰,结合启发式初始化和MDL终止准则,适合处理复杂加权图数据,如蛋白质交互网络,具有广泛的应用前景。

http://www.lqws.cn/news/512605.html

相关文章:

  • 【基础篇-消息队列】—— 如何实现单个队列的并行消费及如何保证消息的严格顺序
  • 爬取小红书相关数据导入到excel
  • SpringCloud系列(35)--使用HystrixDashboard进行服务监控
  • 《汇编语言:基于X86处理器》第4章 数据传送、寻址和算术运算(2)
  • 行为验证码 AJ-Captcha 使用文档
  • Golang Kratos 系列:领域层model定义是自洽还是直接依赖第三方(三)
  • C++字符串的行输入
  • MySQL之SQL性能优化策略
  • 《仿盒马》app开发技术分享-- 兑换列表展示(68)
  • git操作练习(3)
  • 【Python-Day 29】万物皆对象:详解 Python 类的定义、实例化与 `__init__` 方法
  • SQL Server从入门到项目实践(超值版)读书笔记 18
  • git commit --no-verify -m ““ 命令的作用是什么
  • LangChain网页自动化PlayWrightBrowserToolkit
  • Python训练营-Day40-训练和测试的规范写法
  • maven:迁移到 Maven Central 后 pom.xml的配置步骤
  • 马克思主义基本原理期末复习下
  • HarmonyOS开发基础 --鸿蒙仓颉语言基础语法入门
  • 基于元学习的回归预测模型如何设计?
  • 3D重建任务中的显式学习和隐式学习
  • 脉内频率捷变LFM信号
  • 【神经网络预测】基于LSTM、PSO - LSTM、随机森林和多项式拟合的火力机组排放预测
  • 解锁Selenium:Web自动化的常用操作秘籍
  • 超实用教程:n8n + MCP(MinIO Client Processor)构建智能文件处理流水线 - 从零部署到企业级自动化实战​
  • ubuntu20.04安装多版本python时,如何使用sudo python3.10
  • Linux离线搭建Jenkins
  • 有AI后,还用学编程吗?
  • 哈希表理论与算法总结
  • 飞往大厂梦之算法提升-day08
  • Java实现简易即时通讯系统