算法python实现:
对于公式的推导什么的个人的理解并不是很深,下面直接说说这个算法的实现吧:
首先,因为这个算法其实最先是叫做谱方法,用于社区挖掘或者图挖掘,所以要用在聚类上,你需要一种东西来对样本直接进行连接,实现一个类似于图一样的结构,这里使用knn,就是前k个近邻就有连通,其他就没有。这样我们就能得到矩阵W,不过,有一个小问题,点a的k近邻中有b,但是b的k近邻可能是没有a的,这个时候,为了让矩阵W是一个对称矩阵,我们采用一个或原则,将W=(W+WT)/2
,这个就能得到一个对称的相似性矩阵了。
第二步很简单,算出每个节点的度数,得到度矩阵D。
得到拉普拉斯矩阵L=D−W, 。
获得拉普拉斯矩阵L的特征矩阵,这个用内置函数就好。
获得特征矩阵之后,我们使用kmeans方法来对特征矩阵进行一个聚类,每个特征向量是特征矩阵的列,而每行当成一个聚类样本。这样一聚类就是最终的成果了。为了图方便,我这里直接使用sklearn中的KMeans函数来调用:
好了,到这里基本就大功告成了,分类基本已经完成了,最后来一波可视化,看看我们的实验结果,因为谱聚类能对球形数据进行聚类,所以我们直接来试试球形数据集:
参考:https://blog.csdn.net/pp8818/article/details/61623730
源码参考:https://github.com/PP8818/Python-Projects/tree/master/py2/data-mining/clustering/spectral_cluster