聚类--谱聚类
来源:互联网 发布:android图片压缩算法 编辑:程序博客网 时间:2024/04/28 18:16
前言:关于谱聚类,已经有很多厉害的老师和大牛写过教程博客等,也有很不错的tutorial文章可供参考。此博文仅记述个人的一些总结、思考、疑问,算是对现有谱聚类学习资源的一个小补充。
1. 谱聚类简述
说到聚类,可能最先想到的就是经典的Kmeans算法。但是,Kmeans的应用是有前提条件的,它假设(目标式中的)误差服从标准正态分布,因此,Kmeans在处理非标准正态分布和非均匀样本集时,聚类效果会比较差。对于非专业滴同志们,这种统计学术语听起来总是让人觉得有点虚、不好懂,下面给两个图,直观感受一下。
图1.1 (a)非标准正态分布集 (b)非均匀分布集 (c) 处理two moon数据集kmeans可能的聚类结果
对于图1.1中给出的情形,用Kmeans聚类就显得有些力不从心了,比如对于two moon这个toy dataset,理想情况下的结果应该和(a)中所示一致,但kmeans聚类后的效果可能是(c)中的样子。
为了处理这种奇奇怪怪形状分布的数据,谱聚类(spectral clustering)该出场了。不同于Kmeans采用数据点和聚类中心的欧式距离作为相似性度量,谱聚类是基于数据的相似度矩阵,也即,只用给出数据的相似度矩阵而不用给出数据本身,谱聚类就可以得到最终的聚类结果。这里先提一句,谱聚类算法得到最终聚类结果,一般是通过Kmeans,就是说Kmeans成为了谱聚类算法的一部分。另外应该指出的是,谱聚类是一类基于谱方法的聚类算法,只不过平常提到谱聚类,一般都是指代最原始和经典的那两个(Ncut,Ratio Cut),在很多文章和博客里,看到的算法伪代码就是它们的。还有,为什么取名叫谱聚类,个人觉着这个“谱”字,正表明了求解过程与特征分解有关。
2. 公式化表述
在这一节,我们来看一下图论中的标准切割(Ncut)和比例切割(RatioCut),并由此得到标准化的和非标准化的谱聚类目标函数。下面咱们先简单了解一些图论中的概念(这方面基础内容不了解的话,可求助wikipedia/baidu,或见其它博文介绍,或者从公式推导角度直接往下看,也没多大问题)。
设
继续,来看看什么是“割–Cut”。给定一个顶点集
给了一堆概念和定义,一不小心就让人如坠云雾,为什么要扯出什么图论?这个“割”真的是用小刀割东西的那个“割”嘛?首先第一个问题,把数据点看作是一个图中的顶点,继而把对数据的处理,转化为对图的分析,这种隐去实际意义,抓住问题本质的过程,就是建模,模型建好了,在理论上求解完毕了,再反过来对应回一个个实际的问题。事实上,很多实际生活中的问题,就是通过图来分析的,比如实现手机地图软件里的实时导航功能,就是一个路径规划的问题—-两个目的地,即图中两个顶点,是否可达,即是否存在一系列边将这两个顶点连起来,最短路径又是哪条,即怎么走最近。第二个问题,就是你想的那个割,这里割的是图中的边。想一想,要把数据点聚类成若干个簇,对应就是把图中的顶点分成若干个组,我们很自然地希望组内顶点间的关联度大(
2.1 由Ratio Cut到非标准谱聚类
假设我们要把顶点集分成k个组—-聚类成k个簇,
定义k个簇指示向量(indicator vector)
2.2 由Ncut到标准谱聚类
标准切割(Normalized Cut, Ncut)和比例切割很类似,只是衡量簇的大小时是采用的另一种方式,Ncut的目标式是:
3. 目标函数的求解
3.1 瑞利商(Rayleigh quotient)
设
定理:将A的特征值(都是实数)按从大到小的顺序排列为
对于非标准谱聚类目标式(2.6),因为
在上一节中,我们假装看不见离散约束从而得到了谱聚类的目标式,大家心里一定会有困惑,哪能这样搞,那最后的结果肯定不是原问题的解了呀。的确,这么粗暴地简化问题,在理论上是不能保证我们最后得到的解,和原问题(Ratio Cut/Ncut)的解之间有什么必然联系的,只不过在实际问题中,谱聚类取得的效果的确还是不错的。
【注】:根据定义,可知拉普拉斯矩阵L是一个对称半正定阵,即所有特征值都为非负实数,且L的最小特征值为0。对于一个全连通图,L只有一个0特征值,且对应的特征向量为常1向量(constant one vector),就是所有元素都取相同值的单位向量,这种指示向量其实是不具备区分信息的,或者说,它表示把原图划分为一个空集和图自身。所以有时候,我们直接把这个特征向量去掉,只对k-1个指示/特征向量进行分析。对于一个含c个连通分量的图,L有c个0特征值,对应的特征向量就是簇指示向量,可以直接区分出哪些数据点位于同一个连通分量内。另外,除去通过Kmeans得到最终的聚类结果,也有人用谱旋转(spectral rotation)得到,在此不做展开。
3.2 拉格朗日乘子法
在这一小节,我们直接从拉格朗日乘子法的角度来求解谱聚类。设
4. 从图重构角度再理解
4.1 正交非负约束
谱聚类目标式中,指示向量可取任意实值,而原始Ratio Cut/Ncut中,指示向量元素是离散的非负值。如果我们在松弛过程中,带上非负约束,那么新的模型应该更接近于原始问题,公式化表述就是:
图4.1 正交非负约束下的F示意图。这两个约束使得F是一个离散取值的、稀疏的、具有物理意义的矩阵,物理意义就是上面说的元素值对应数据和簇的关系。示意图中,F是一个“9x3”的指示矩阵,表示有9个数据点,分别属于3个不同的簇,比如第一个点属于第一个簇,则F的第一行第一列元素非零(实心黑圆),第一行其它元素为0,指示向量(F的列)是单位向量。
4.1 图重构角度
在这一节,我们关注一种特殊情形,并得到谱聚类的图重构理解视角。如果我们构建了一个图,它的相似度矩阵
式(4.2)就体现了图重构的思想。
图4.2 指示矩阵重构图示意
5. 与K-means的联系
Kmeans公式化表述的证明过程可参见另一篇谈PCA的博文,这里只贴结果,Kmeans的目标函数可以写成如下形式:
与谱聚类对比,Kmeans的交替迭代过程,相当于是直接在求一个离散定义的带正交约束的问题,没有像谱聚类一样对原问题进行松弛。两者构建相似度矩阵、以及定义指示矩阵的方式不同,但从形式上来看,两者的确有一些共通之处。
6. 谱聚类的不足
因为要计算拉普拉斯矩阵的特征分解,谱聚类一个很大的问题是计算复杂度高,达到
另一个不足是out of sample的问题,即给定一个新的测试样例,无法方便地得到其聚类标签,必须重新对整个数据集(包括新加的样例)来一遍完整的谱聚类流程。这个问题的一种解决思路是,得到训练数据的指示矩阵F后,将F的行作为线性回归中的标签项(
7. 一个小问题
本文写作过程中主要参考了A Tutorial on Spectral Clustering,在论文第九页,定义Ratio Cut和Ncut的目标函数时,我始终觉得有点问题,少了一个系数1/2,虽然这并不影响最终结果,因为对于最小最大问题,常系数是可以去掉的。不过单纯从加深理解的角度,还是可以看细一点,在此贴出我的问题,还希望正好知道这一点的人不吝赐教。
上面的Ratio Cut 和Ncut的目标式中,第二个等式我觉得有问题,举个例子,k=2时:
主要参考文献/资源
【1】Luxburg U V. A tutorial on spectral clustering[J]. Statistics and Computing, 2007, 17(4):395-416.
【2】http://blog.csdn.net/v_july_v/article/details/40738211
【3】http://blog.pluskid.org/?p=287
【4】http://www.cnblogs.com/xingshansi/p/6702188.html
附录—–Ratio Cut相关证明
先贴一个很重要的公式,这一项在一些地方被称作图正则项(graph regularization),可以将有监督学习扩展为半监督学习,它可以从流形学习的观点来解释,这里不展开。
注意,这里
在参考文献[1]中,讲Ratio Cut时,是用二聚类情形作为例子,进行了较为详细地引出和推证,对于更为一般的情形,原文中只是给出了结论,网络上现有的博文,大多也是直接贴上原文中在二聚类情形下的证明。在这里,我们给出一般情形下的证明(本文正文中也是只关注了一般情形),证明过程跟二聚类情形是很类似的。
我们要证明的结论是:
注意到
Ncut的相关结论也可按照上述过程推证,此处略。
- 聚类--谱聚类
- 聚类 - 5 - 谱和谱聚类
- 谱聚类、Chameleon聚类、PCCA、SOM、Affinity Propagation
- 机器学习笔记_ 聚类_2:谱聚类
- 聚类算法实践——谱聚类、Chameleon聚类
- 聚类算法(2)——谱聚类、Chameleon聚类
- 谱聚类
- 谱聚类
- 谱聚类
- 谱聚类
- 谱聚类
- 谱聚类
- 谱聚类
- 谱聚类
- 谱聚类
- 谱聚类
- 谱聚类
- 谱聚类
- sqlite源码剖析(一)
- leetcode 61. Rotate List
- leetcode 78!!!vector push_back不能和迭代器同时使用!!!
- eclipse的node.js环境搭建
- Ruby中“||=”符号理解
- 聚类--谱聚类
- 04 Mybatis源码篇---XML配置之environments环境
- Sql Server 日志收缩
- 整体二分\cdq分治——洛谷P3332 [ZJOI2013]K大数查询
- Objective-C 推送通知
- Qt-Xcode升级导致编译不过
- 对称加密技术
- SQL— CONCAT(字符串连接函数)
- jdbc原生态问题总结