谱聚类算法(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,不过谱聚类的半监督学习,都有点扯。
参考文献:
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)优化与扩展的更多相关文章
- 谱聚类算法(Spectral Clustering)
谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法--将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的 ...
- 谱聚类(spectral clustering)原理总结
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...
- 谱聚类(Spectral clustering)(2):NCut
作者:桂. 时间:2017-04-13 21:19:41 链接:http://www.cnblogs.com/xingshansi/p/6706400.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 谱聚类(Spectral clustering)分析(1)
作者:桂. 时间:2017-04-13 19:14:48 链接:http://www.cnblogs.com/xingshansi/p/6702174.html 声明:本文大部分内容来自:刘建平Pi ...
- 谱聚类(Spectral clustering)(1):RatioCut
作者:桂. 时间:2017-04-13 19:14:48 链接:http://www.cnblogs.com/xingshansi/p/6702174.html 声明:本文大部分内容来自:刘建平Pi ...
- 谱聚类(Spectral Clustring)原理
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...
- 谱聚类算法—Matlab代码
% ========================================================================= % 算 法 名 称: Spectral Clus ...
- Standford机器学习 聚类算法(clustering)和非监督学习(unsupervised Learning)
聚类算法是一类非监督学习算法,在有监督学习中,学习的目标是要在两类样本中找出他们的分界,训练数据是给定标签的,要么属于正类要么属于负类.而非监督学习,它的目的是在一个没有标签的数据集中找出这个数据集的 ...
- 谱聚类算法及其代码(Spectral Clustering)
https://blog.csdn.net/liu1194397014/article/details/52990015 https://blog.csdn.net/u011089523/articl ...
随机推荐
- @property、@sythesize以及Ivar和@dynamic讲解(下)
下面仅仅是一些基本知识,可能有些知识用的比较少,不过知道怎么使用或者了解这个知识,还是不错的,毕竟技多不压身嘛!读完这篇文章大约需要5-10分钟左右!!! 一.@property 1.在头文件中: @ ...
- 微信开发中网页授权access_token与基础支持的access_token异同 【转载、收藏】
问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样.网页授权access_token 是一次性的,而基础支持的access_token的是有时间 ...
- .NET CORE 设置cookie以及获取cookie
使用我这个方式的前提是在mvc中,确认你安装了:Microsoft.AspNetCore.Mvc. 然后在继承了Controller的类型中使用我所说的方法. 直接使用即可,我是封装了方法供我自己使用 ...
- C#.NET 中的 Timer 计时器及 3 种使用方法
定时器是系统常用的组件之一,程序员可以根据自己的需求定制一个定时器类型,也可以使用.net内建的定时器类型.在.net中一共为程序员提供了3种定时器: System.Windows.Forms.Tim ...
- vs2010打不开vs2017的.sln文件,出现错误提示 “选择的文件是解决方案文件 但是用此应用程序的较新版本创建的,无法打开”
解决方案: 1.复制下面这段语句 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 2. ...
- [android] android下文件访问的权限
/**************2016年5月4日 更新**************************/ 知乎:android编程中写文件(例如a.txt)后存在手机哪个位置啊? 用FileOut ...
- 21.QT-QTreeWidget,QTabWidget
QTreeWidget树形列表 设置标签相关函数 void QTreeWidget::setHeaderItem (QTreeWidgetItem * item ); void QTreeWidget ...
- Java 学习笔记 判断一个数组是否有序
思路 升序:每次比较数组中的两个数的时候,最大的数一定是前一个 降序: 每次比较数组中的两个数的时候,最小的数一定是前一个 Flag1和flag2都是假的时候,返回flase,否则,返回flase 代 ...
- 关于openSetting通过tap的调用
问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本 API和组件 小程序 Bug openSetting 工具 6.7.2 2.3.0 - 当前 Bug 的表现(可附上截图 ...
- 原生JS实现随着鼠标滚动到元素位置触发对应css3动画,简单易用滚动监测
预览链接:http://www.vanwee.cn/%E6%BB%9A%E5%8A%A8%E7%9B%91%E5%90%AC/ <style> body{overflow-x: hidde ...