谱聚类的增量更新原理

一、导言

谱聚类(Spectral Clustering)因为其严谨的理论基础及其能够处理复杂聚类形状的优势,在实践中存在大规模的应用。

对谱聚类有一定了解的同学一定知道,谱聚类有两种解释的观点:图分割和随机游走,Laplacian矩阵的特征值分解如何等价(近似)与图分割或随机游走的数学证明不在本篇博客的范围内。

当我们被给定一个dataset,不管我们用哪一种方式去求解Laplacian矩阵的特征值和特征向量,最终得到的是该dataset内所有样本点所属的cluster。这就引入了该篇博客想要阐述的问题:

当我们更新dataset中的样本点或向dataset中增加样本点,是否存在某种(近似)方法能够在低时间复杂度上动态更新特征值和特征向量,能够避免每次重新求解。

本博客主要参考论文“Incremental spectral clustering by efficiently updating the eigen-system”,以下即对该论文的核心观点进行深度解读。

二、算法原理

1、先导

该篇博客内涉及到非常多谱聚类的背景知识,这些前导知识对理解谱聚类的增量更新方式非常重要,建议读者优先阅读Von Luxburg的”A tutorial on spectral clustering”,见文献[1]。

博客中的算法原理、公式推导主要参考文献[2],爱智求真的读者可以直接阅读原文文献。

另外,该博客以算法展示和可行性论证为主;而公式推导部分非常繁杂,有时间我会在以后的博客中深究推导。

2、 问题引入

当我们对下图中的a进行谱聚类(聚类数量=2)的时候,我们发现 ABC DEF 能够成为两个聚类。但当我们调整 EdgeCD=0.1 EdgeCD=0.5 、同时增加 EdgeFG=0.5 的时候,通过谱聚类发现 ABCD EFG 成为两个聚类。

这里写图片描述

当“边的增删改”动作非常频繁,且我们要处理的图非常大的时候,每次全图进行谱聚类的开销会无法承担。

那么接下来论文中提出了一种很实用的算法框架,能够在近似O(n)的时间复杂度上对谱聚类得到的特征值和特征向量进行更新。

3、Incidence vector & Incidence matrix

incidence vector的定义如下:

Incidence vector rij(w) 是一个列向量(长度为样本点的数量),第 i 个位置上的值为w、第 j 个位置上的值为w,其余位置的值为 0

incidence matrix的定义如下:

Incidence matrix R 的每一列为一个incidence vector。

由定义我们可以发现,incidence matrix R 内包含了相似度矩阵的所有信息。下面我们用一个6个节点的网络进行示意:

这里写图片描述

那么接下来我们可以得到这样的结论:

L=RRT,其中 R=rij(wij):1i<jn

(此处证明略去,读者可自行证明。)

那么对于上述6节点的网络示例,我可以做出以下推断:

RRT===110000101000011000001100000110000111000011110000010100000111000000111000001010000011211000121000113100001311000121000112L

接下去,如果样本点 i j有了一次相似度的改变 Δwij ,那么对应的incident vector可以表达为 rij(Δwij) 。新的Laplacian矩阵可以表达为 L̃ =R̃ R̃ T ,其中 R̃ =[R,rij(Δwij)]

这样我们可以引出:

ΔL=L̃ L=ΔwijuijuTijΔD=Δwijdiag{vij}

uij 是列向量且第i位置上的值为1,第j位置上未-1,其余为0。
vij 是列向量且第i,j位置上的值为1,其余为0。

这样当我们尝试去修改这个图的时候,“边的增删改”操作可以分解为一系列相似度的改变 Δwij

4、从Ncut来看谱聚类

根据拉普拉斯矩阵的定义: L=DW ,我们可以求解 L 的特征值。

fTLf===fTDffTWfi=1ndif2ii,jnfifjwij12i,jnwij(fifj)2

接下去,我们用二分类问题来证明Ncut和求解 L 的特征向量等价:

首先将特征向量的选择条件放宽,假定fi为非正即负:

fi=vol(A¯)vol(A)vol(A)vol(A¯)ifviAifviA¯

那么我们可以证明Ncut等价与normalized谱聚类:

fTLf======12i,jnwij(fifj)212iA,jA¯wijA¯|A|+|A|A¯2+12iA¯,jAwij|A|A¯A¯|A|212iA,jA¯wij+12iA¯,jAwij(|A|A¯+A¯|A|+2)iA,jA¯wij(vol(V)vol(A)+vol(V)vol(A¯))vol(V)12i=12W(Ai,A¯i)vol(Ai)vol(V)Ncut(A,A¯)

k=2 我们可以衍生至 k 为任意值时的场景,在此不再继续推导。

5、特征向量Δλ和特征值 Δf 的计算

从第4节中,我们推导出:

ΔL=L̃ L=ΔwijuijuTijΔD=Δwijdiag{vij}

uij 是列向量且第i位置上的值为1,第j位置上未-1,其余为0。
vij 是列向量且第i,j位置上的值为1,其余为0。

又由于广义特征系统 Ax=λBx ,可以做出以下推导:

AxΔAx+AΔxxTΔAx+xTAΔxxTΔAx=λBx=ΔλBx+λΔBx+λBΔx=xTΔλBx+xTλΔBx+xTλBΔx=ΔλxTBx+λxTΔBx

之后将 A 替换为L B 替换成D x 替换成 f ,则可以得到:

Δλ=ΔwijfT(uijuTijλdiag{vij})ffTDf=ΔwijfTuijuTijΔwijλfTdiag{vij}f=Δwij((fifj)2λ(f2i+f2j))

Δf=(KTK)1KTNijh;K=LλDh=(ΔλD+λΔDΔL)f

注意, Δλ 可以很快计算出来,但是 Δf 的时间复杂度仍然非常高。这时,我们可以做出以下近似:

对于 Δf K 的计算,由于一次Δwij只会对局部的聚类结果产生影响;那么对于远离 i,j 的任意点 k ΔfikΔfjk均为0。

我们定义 i,j 的所有邻居 Nij={k|wik>τorwik>τ} ,其中 τ 可以进行大小调整以体现 i,j 的邻居信息。这样我们就可以得到:

Δfij=(KTNijKNij)1KTNijh

6、算法主体

Algorithm 迭代更新 Δλ Δf
1. 首先根据一次相似度的变化计算 Δwij
2. 设 Δf=0
3. 计算 Δλ=Δwij((fifj)2λ(f2i+f2j))
4. 计算 Δfij=(KTNijKNij)1KTNijh
5. 重复 步骤2 和 3直到 Δλ Δf 没有明显变化或达到 n 次迭代上限。

由于算法在经过多次对单个图的计算后,误差会不断累积,我们在每隔一段时间重新全局进行谱聚类的计算即可。

7、时间复杂度

根据公式我们能够看到Δλ的时间复杂度为常数,而 Δf 的计算时间复杂度为:

O(N¯2n)+O(N¯3)+O(N¯n)+O(N¯2)

其中从左到右,分别对应着 KTNijKNij 的计算、求逆计算、 KTNijh 的计算和最终乘积计算, N¯ 即由 τ 决定的邻居的数量。

该算法的时间复杂度比谱聚类的常规解 O(n3) ,甚至很多近似解(如Labczos解法的 O(n3/2) )都要要小很多。

三、文献

[1] Von Luxburg U. A tutorial on spectral clustering[J]. Statistics and computing, 2007, 17(4): 395-416.
[2] Ning H, Xu W, Chi Y, et al. Incremental spectral clustering by efficiently updating the eigen-system[J]. Pattern Recognition, 2010, 43(1): 113-127.

### Ward 准则在层次聚类中的原理详解 #### 什么是 Ward 准则? Ward 准则是层次聚类中的一种方法,其核心目标是最小化每次合并簇时引起的总方差增加。具体来说,它通过衡量两个簇合并后的平方误差增量来决定最优的合并方案[^4]。 #### Ward 方法的核心概念 1. **簇间距离定义** 在 Ward 方法中,两个簇 \( C_i \) 和 \( C_j \) 的邻近度被定义为这两个簇合并时导致的平方误差增量。这种增量可以表示为: \[ d(C_i, C_j) = \frac{|C_i| |C_j|}{|C_i| + |C_j|} ||\mu_i - \mu_j||^2 \] 其中: - \( |C_i| \) 表示簇 \( C_i \) 中的数据点数量; - \( \mu_i \) 是簇 \( C_i \) 的质心(即均值向量); - \( ||\cdot||^2 \) 表示欧几里得范数的平方。 这一公式表明,Ward 方法倾向于优先合并那些能够最小化总体方差增长的簇组合。 2. **目标函数优化** Ward 方法的目标是使整个数据集内的平方误差和尽可能小。这一目标与 K 均值聚类非常相似,因为两者都试图最小化簇内偏差。然而,不同之处在于 Ward 方法是一种自下而上的层次聚类技术,而不是迭代划分方法。 3. **簇合并的影响** 当两个簇合并成一个新的簇时,新的簇中心可以通过加权平均计算得到: \[ \mu_{ij} = \frac{|C_i| \mu_i + |C_j| \mu_j}{|C_i| + |C_j|} \] 合并后的新簇会重新参与后续的距离计算,从而影响下一步的合并决策。 #### Ward 方法的优点与局限性 - **优点** - 能够有效减少簇间的离散程度。 - 提供了一种清晰的数学框架用于评估簇的质量。 - 结果通常具有较高的紧凑性和分离度。 - **局限性** - 对初始数据分布较为敏感,尤其是存在噪声或异常值的情况下表现较差[^5]。 - 时间复杂度较高,不适合处理超大规模数据集。 #### 实现 Ward 层次聚类的一个简单例子 以下是使用 Python 的 `scipy` 库实现 Ward 层次聚类的代码示例: ```python from scipy.cluster.hierarchy import linkage, dendrogram import matplotlib.pyplot as plt import numpy as np # 创建随机数据点 np.random.seed(0) data = np.random.rand(10, 2) # 使用 Ward 方法进行层次聚类 Z = linkage(data, method='ward') # 可视化树状图 plt.figure(figsize=(8, 5)) dendrogram(Z) plt.title('Dendrogram using Ward Method') plt.xlabel('Data Points') plt.ylabel('Distance') plt.show() ``` 此代码展示了如何利用 `linkage` 函数执行 Ward 层次聚类,并绘制对应的树状图以直观展示簇结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值