简介
文章将介绍谱聚类(spectral clustering)的基本算法,以及在matlab下的代码实现。介绍内容将包括:
从图分割角度直观理解谱聚类
谱聚类算法步骤
数据以及实现代码
本文将不会涉及细节化的证明和推导,如有兴趣可参考july大神的文章从拉普拉斯矩阵说到谱聚类.
对谱聚类的理解
这一节将从图分割聚类的角度直观理解谱聚类。不过,因为本人是从事社交媒体分析的,将从一种社会关系网络的角度来介绍网络图分割成多个子图的概念。
图的分割
首先将社会关系网络看成是一个整体,每一个个体(user)就是这个网络中的各个节点(node),而连接个体的就是各个节点之间的边(edge)。在不同性质的网络中,边的定义可能有所不同,这里可以简单的理解成个体之间关系的亲密度。如图(1)所示
图(1)
每个个体与其他个体之间都有关系亲密度(也叫做权重,设定范围是[0,1]),可以看到user1,2,3之间关系紧密,user4,5,6关系紧密,而两个小部分是靠着user2和user6来联系的。以现实生活为例,123是A班级同学,456是B班级同学,2和6正好是认识的,关系一般,所以我们可以直观的把2和6之间的边给截断(cut),从而形成两个互不相关的子图,这样就完成了对这个网络的分割。
图的泛化意义
很多时候,并不是说一定要实际生活中是一个网络(network)的事物,才能够用图(graph)模型来表示。图模型只是解决问题的一个模型,可能一个对象既可以用图模型,也可以用非图模型来解决