[code] spectral cluster

1 根据数据构造一个graph, graph的每个节点对应一个数据点, 边的权重表示数据之间的相似度, 0表示完全不相似(通常为减少计算量, 将相似度低于阀值r的都记为0)。 graph用邻接矩阵的形式表示出来, 记为W.

 

2 把W的每一列元素加起来得到N个数,把他们放在对角上形成一个N * N矩阵, 记为D, D的其他元素都是0。 并令 L = D - W

 

3 求出L的前k个特征值及其对应的特征列向量

 

4 将这k个特征列向量排列在一起组成一个N * k的矩阵, 将每一行看做是一个k维空间中的向量, 然后对这N个k维向量进行聚类。

 

聚类的结果就是最终graph中的点的类别。

 

cut(A, B) = sigma(i in A, j in B) wij

RatioCut(A, B) = cut(A, B)/|A| + cut(A, B)/|B|

NCut(A, B) = cut(A, B)/vol(A) + cut(A,B)/vol(B), NCut 是normalized cut, vol(A)表示A中的边之和

 

两者都可以算作 A 的“大小”的一种度量,通过在分母上放置这样的项,就可以有效地防止孤立点的情况出现,达到相对平均一些的分割。

 

  

 

partition调用bestCut对W进行划分,直到cut > alpha_cut为止。

bestCut的计算使用了本文最开头的步骤(有一些不一样。。), W, D, L=D-W,计算特征值和特征向量。。

 

还需要理解。。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值