谱聚类算法(Spectral Clustering)优化与扩展

 

谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交网络中广泛应用。本文将讲述进一步扩展其应用场景:首先是User-Item协同聚类,即spectral coclustering,之后再详述谱聚类的进一步优化。

1 Spectral Coclustering

1.1 协同聚类(Coclustering)

在数据分析中,聚类是最常见的一种方法,对于一般的聚类算法(kmeans, spectral clustering, gmm等等),聚类结果都类似图1所示,能挖掘出数据之间的类簇规律。

图1 聚类结果图

即使对于常见的数据User-Item评分矩阵(常见于各社交平台的数据之中,例如音乐网站的用户-歌曲评分矩阵,新闻网站的用户-新闻评分矩阵,电影网站的用户-电影评分矩阵等等),如表1所示。在聚类分析中,也常常将数据计算成User-User的相似度关系或Item-Item的相似度关系,计算方法诸如应用Jaccard距离,将User或Item分别当成Item或User的特征,再在此基础上计算欧氏距离、cos距离等等。

表1 User-Item评分矩阵

但是如果能聚类成如图2中的coclustering关系,将User和Item同时聚类,将使得数据结果更具意义,即在音乐网站中的用户和歌曲coclustering结果表明,某些用户大都喜欢某类歌曲,同时这类歌曲也大都只被这群用户喜欢着。这样,不管是用于何种场景(例如歌曲推荐),都将带来极大的益处。

图2 coclustering图

1.2 Spectral Coclustering

对于User-Item评分矩阵,这是一个典型的二部图(Bipartite Grap),Item-User矩阵A,假设A为N*M,即N个item和M个user,可展开成:

其中E为(M+N)*(M+N)的方阵,且对称。

对于A的二部图,只存在Item与User之间的邻接边,在Item(User)之间不存在邻接边。再用谱聚类原理——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远。这样的聚类结果将Cut尽量少的边,分割出User和Item的类,如果类记Ci(U,I)为第i个由特定的User和Item组成的类,由谱聚类原理,Cut掉的Ci边为中的User或Item与其它类Cj(j≠i)的边,且其满足某种最优Cut方法,简单地说,Cut掉的User到其它类Cj(j≠i)的Item的边,可理解为这些User与其它Item相似关系较小;同样Cut掉的Item到其它类Cj(j≠i)的User的边,可理解为这些Item与其它User相似关系较小。这正好满足coclusering的定义。

在谱聚类的基础上,再实现Spectral Coclustering,十分简单, 将E直接当成谱聚类的邻接矩阵即可,至于求Laplacian矩阵、求特征值、计算Kmeans,完成与谱聚类相同。

    PS:更多详情,请参见参考文献1。

2 谱聚类的半监督学习

假设有大量新闻需要聚类,但对于其中的部分新闻,编辑已经人工分类好了,例如(Ni1,Ni2, …, Nim),为分类好的第i类,那么对于人工分类好的数据,就相当于聚类中的先验知识(或正则)。

在聚类时,可相应在邻接矩阵E中增加类彼此间邻接边,并使得其邻接权重较大,这样生成的邻接矩阵为E’。这样,再对此邻接矩阵E’做谱聚类,聚类结果将在一定程度上维持人工分类的结果,并达到聚类的目的。

    PS:更多详情,请参见参考文献2,不过谱聚类的半监督学习,都有点扯。

3 谱聚类优化

假设需要应用谱聚类对Query做聚类,用于识别相似的Query,往往Query数极多(百万级),目标类簇中每个类的元素较少,也就是需要聚类出较多的类簇。对于谱聚类过程:

第一步:数据准备,生成图的邻接矩阵;

第二步:归一化普拉斯矩阵;

第三步:生成最小的k个特征值和对应的特征向量;

第四步:将特征向量kmeans聚类成需要的u类(少量的特征向量,k与聚类个数并非要求相同);

其中最耗时的部分为第三部,应用ARPACK计算时,复杂度如下公式所示,单论特征值数k的增大,复杂度将成立方级别的增长。    在完成类簇u数较大的聚类时,可采用多轮聚类:

每轮将第三步的k值设置成较少的值,从而生成k(较小)的最小特征向量耗时也相对较少,在第四步中,将kmeans聚类的u数设置成略大(可加快聚类速度)。对第四步之后的结果做筛选,如果类簇大小满足需求时,将相应的图谱邻接矩阵中删除满足需求的点和边,生成新的邻接矩阵Ei,如果Ei点数满足一定阈值时退出,即得到最后的所有谱聚类结果,如果Ei不满足阈值,继续循环。

这样多轮的谱聚类,每轮所需要时间都将减少,时间复杂度也将大大小时一轮的聚类。也可以形象地理解为,每轮聚类是将图中最好分的小类筛除,一轮一轮之后,达到聚类出较多类簇的目标。

参考文献:

1 Inderjit S. Dhillon. Co-clustering documents and words using Bipartite Spectral Graph Partitioning;

2 W Chen. Spectral clustering: A semi-supervised approach;

3 Wen-Yen Chen, Yangqiu Song, Hongjie Bai, Chih-Jen Lin, Edward Y. Chang. Parallel Spectral Clustering in Distributed Systems.

----

只能永远把艰辛的劳动看作是生命的必要;即使没有收获的指望,也能心平气和的继续耕种。
 

Spectral Clustering的更多相关文章

  1. 谱聚类(spectral clustering)原理总结

    谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...

  2. 【聚类算法】谱聚类(Spectral Clustering)

    目录: 1.问题描述 2.问题转化 3.划分准则 4.总结 1.问题描述 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图 ...

  3. 谱聚类(Spectral Clustering)详解

    谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似 ...

  4. 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut

    原文请戳:http://blog.csdn.net/abcjennifer/article/details/8170687 聚类算法是ML中一个重要分支,一般采用unsupervised learni ...

  5. 谱聚类 Spectral Clustering

    转自:http://www.cnblogs.com/wentingtu/archive/2011/12/22/2297426.html 如果说 K-means 和 GMM 这些聚类的方法是古代流行的算 ...

  6. 基于谱聚类的三维网格分割算法(Spectral Clustering)

    谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...

  7. 谱聚类算法(Spectral Clustering)优化与扩展

    谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交网络中广泛应用.本文将讲述进一步扩展其应用场景:首先是User- ...

  8. 谱聚类算法(Spectral Clustering)

        谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法--将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的 ...

  9. Clustering[Spectral Clustering]

    0. 背景 谱聚类在2007年前后十分流行,因为它可以快速的通过标准的线性代数库来实现,且十分优于传统的聚类算法,如k-mean等. 至于在任何介绍谱聚类的算法原理上,随便翻开一个博客,都会有较为详细 ...

随机推荐

  1. hdu 1712 (分组背包入门)

    http://acm.hdu.edu.cn/showproblem.php?pid=1712 问题 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].这些物品被划分为若干组, ...

  2. POJ 1664 把苹果

     把苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25785   Accepted: 16403 Descript ...

  3. 找呀志_使用SQLiteDatabase增删改提供的搜索方法和事务

    知识具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9026093 MainActivity.java,User.java,BaseDa ...

  4. crawler_httpurlconnection_自动编码识别

    核心思想: 1:从响应头中读取 [命中解流准确率最高] 2:如果响应头中没有,打开流从源码中读取,[取舍,如果有一般在前30行会有,前100行中寻找] 3:如果还没有,根据字节码code位置,字符识别 ...

  5. ArcGIS API for Silverlight 使用GP服务实现要素裁剪功能

    原文:ArcGIS API for Silverlight 使用GP服务实现要素裁剪功能 昨天一QQ好友问了一个关于裁剪的问题,感觉自己也没有帮上什么忙,之后自己做了一个裁剪的例子,不过在做这个例子的 ...

  6. HDU 3376 && 2686 方格取数 最大和 费用流裸题

    题意: 1.一个人从[1,1] ->[n,n] ->[1,1] 2.仅仅能走最短路 3.走过的点不能再走 问最大和. 对每一个点拆点限流为1就可以满足3. 费用流流量为2满足1 最大费用流 ...

  7. DataTable与实体类的转换

    多年前写的DataTable与实体类的转换,已放github 阅读目录 介绍 起因 代码 UnitTest GitHub 介绍 很多年前一直使用Ado.net,后来慢慢转型到其他的orm,在转型过程中 ...

  8. python tcp socket 多线程

    不多说,直接上代码 client.py #!/usr/bin/python import socket,sys,string host="localhost" port=8000 ...

  9. 音乐TV2015校园招聘A第二大发行量(对中国科学院大学站)

    标题叙述性说明:鉴于阵列A,尺寸n,数组元素1至n数位,但是,一些数字多次出现,有些数字不出现.请设计算法和程序.统计数据不会出现什么.什么号码多次出现. 您可以O(n)时间复杂度,O(1)求下完毕么 ...

  10. 网站静态化处理—web前端优化—中(12)

    网站静态化处理—web前端优化—中(12) Web前端很多优化原则都是从如何提升网络通讯效率的角度提出的,但是这些原则使用的时候还是有很多陷阱在里面,如果我们不能深入理解这些优化原则背后所隐藏的技术原 ...