利用谱聚类算法解决非完全图的聚类

  在处理非完全图的聚类时候,很难找到一个有效的聚类算法去做聚类。

  对于下图来说,10号点和15号点的位置相隔并不是那么近,如用普通聚类算法对下图做聚类,通常会把10号点和15号点聚在一个类上,所以一般的聚类效果并没有那么好。

  

  而谱聚类,就很能很好的处理这类问题。  

  下面我们来重点介绍谱聚类

  谱聚类(SpectralClustering),就是要把样本合理地分成两份或者K份。从图论的角度来说,谱聚类的问题就相当于一个图的分割问题。即给定一个图G = (V, E),顶点集V表示各个样本,带权的边表示各个样本之间的相似度,谱聚类的目的便是要找到一种合理的分割图的方法,使得分割后形成若干个子图,连接不同子图的边的权重(相似度)尽可能低,同子图内的边的权重(相似度)尽可能高。物以类聚,人以群分。

(一) 算法步骤

  1. 根据数据构造一个Graph,Graph的每一个节点对应一个数据点,将各个点连接起来(随后将那些已经被连接起来但并不怎么相似的点,通过cut/RatioCut/NCut 的方式剪开),并  且边的权重用于表示数据之间的相似度。把这个Graph用邻接矩阵的形式表示出来,记为 W
  2. W的每一列元素加起来得到N个数,把它们放在对角线上(其他地方都是零),组成一个的对角矩阵,记为度矩阵D,并把的结果记为拉普拉斯矩阵。
  3. 求出L的前k个特征值(前k个指按照特征值的大小从小到大排序得到),以及对应的特征向量。
  4. 把这k个特征(列)向量排列在一起组成一个的矩阵,将其中每一行看作k维空间中的一个向量,并使用 K-means 算法进行聚类。聚类的结果中每一行所属的类别就是原  来 Graph 中的,因此节点亦即最初的N个数据点分别所属的类别。

(二) 谱聚类的实现

python编程,利用sklearn.cluster 下的 SpectralClustering可以很轻易的实现

from sklearn.cluster import SpectralClustering
labels=SpectralClustering(affinity=‘nearest_neighbors‘,n_clusters=20, n_neighbors=3).fit_predict(route)

#labels=

[ 3,  3,  5,  7,  8,  8,  9,  4,  4, 15, 15,  2,  2, 15, 16, 17, 18, 13,  1, 12,  2,  2,  2,  2,  2, 15, 15, 16, 16,  9,  4,  4,  4,  4, 17, 17, 17, 14, 14, 14, 18, 18,  3,  5,  4,  4,  9,  9,  8,  8,  8,  8,  8,  5,  5,  8, 19, 19,  8, 19,  8,  7,  7,  6,  6,  6,  6, 11,  3,  3,  3,  3,  3,  3, 11, 11, 11,  1,  1,  1, 13, 13, 13, 10, 12, 12,  0,  0, 10, 10,  0,  0]

其中:

1)n_clusters:代表我们在对谱聚类切图时降维到的维数。如分为20个聚类簇,n_clusters=20。

2) affinity: 也就是我们的相似矩阵的建立方式。可以选择的方式有三类,第一类是 ‘nearest_neighbors‘,即K邻近法;第二类是‘precomputed‘,即自定义相似矩阵;第三类是全连接法,可以使用各种核函数来定义相似矩阵,还可以自定义核函数。基于对有向图的聚类,本文的参数选择是,affinity=‘nearest_neighbors‘, n_neighbors=3。

再把图画出来,完美解决类似于10号和15号坐标分成一类的问题。结果如下图

这个例子的实现所需要的数据和代码已经上传到github:https://github.com/yjx7/-SpectralClustering.git    有用给个star谢谢啦

时间: 2024-10-10 22:01:12

利用谱聚类算法解决非完全图的聚类的相关文章

机器学习(6)之聚类算法(k-means\Canopy\层次聚类\谱聚类)

目录 1 聚类的定义 1.1 距离公式(相似度) 1.2 聚类的思想 2 K-means算法 2.1 K-means算法的思考 2.2 总结 3 二分K-Means算法 4 K-Means++算法 4.1 K-Means||算法 5 Canopy算法 5.1 应用场景 6 Mini Batch K-Means算法 7 层次聚类方法 7.1 AGNES算法中簇间距离 7.2 层次聚类优化算法 8 密度聚类 8.1 DBSCAN算法 8.1.1 基本概念 8.1.2 算法流程 8.1.3 DBSCA

k-均值聚类算法;二分k均值聚类算法

根据<机器学习实战>一书第十章学习k均值聚类算法和二分k均值聚类算法,自己把代码边敲边理解了一下,修正了一些原书中代码的细微差错.目前代码有时会出现如下4种报错信息,这有待继续探究和完善. 报错信息: Warning (from warnings module): File "F:\Python2.7.6\lib\site-packages\numpy\core\_methods.py", line 55 warnings.warn("Mean of empty

聚类算法--K-means和k-mediods/密度聚类/层次聚类

目录 简述 K-means聚类 密度聚类 层次聚类 一.简述 聚类算法是常见的无监督学习(无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类). 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善模型.而在聚类算法中是怎么来度量模型的好坏呢?聚类算法模型的性能度量大致有两类: 1)将模型结果与某个参考模型(或者称为外部指标)进行对比,个人觉得认为这种方法用的比较少 2)另一种是直接使用模型的内部属性,比如样本之间的距离(闵可夫斯基距离)来作为评判指标,这

【ML-7】聚类算法--K-means和k-mediods/密度聚类/层次聚类

目录 简述 K-means聚类 密度聚类 层次聚类 一.简述 聚类算法是常见的无监督学习(无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类). 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善模型.而在聚类算法中是怎么来度量模型的好坏呢?聚类算法模型的性能度量大致有两类: 1)将模型结果与某个参考模型(或者称为外部指标)进行对比,个人觉得认为这种方法用的比较少 2)另一种是直接使用模型的内部属性,比如样本之间的距离(闵可夫斯基距离)来作为评判指标,这

模式识别之聚类算法k-均值---k-均值聚类算法c实现

//写个简单的先练习一下,测试通过 //k-均值聚类算法C语言版   #include <stdlib.h>      #include <stdio.h>      #include <time.h>      #include <math.h>     #define TRUE             1     #define FALSE            0     int N;//数据个数    int K;//集合个数    int * Ce

ML: 聚类算法R包-K中心点聚类

K-medodis与K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值,在 K-medoids算法中,我们将从当前cluster 中选取这样一个点--它到其他所有(当前cluster中的)点的距离之和最小--作为中心点.K-medodis算法不容易受到那些由于误差之类的原因产生的脏数据的影响,但计算量显然要比K-means要大,一般只适合小数据量. K-medoids

【转载】聚类算法小结

聚类算法总结:---------------------------------------------------------聚类算法的种类: 基于划分聚类算法(partition clustering) k-means: 是一种典型的划分聚类算法,它用一个聚类的中心来代表一个簇,即在迭代过程中选择的聚点不一定是聚类中的一个点,该算法只能处理数值型数据 k-modes: K-Means算法的扩展,采用简单匹配方法来度量分类型数据的相似度 k-prototypes: 结合了K-Means和K-M

挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的一种聚类算法,是BIRCH层次聚类算法的改进版本.可以应用于混合属性数据集的聚类,同时加入了自动确定最佳簇数量的机制,使得方法更加实用.本文在学习文献[1]和“IBM SPSS Modeler 15 Algorithms Guide”的基础上,融入了自己的理解,更详尽地叙述两步聚类算法的流程和细节.

【转载】各种聚类算法的比较

聚类的目标是使同一类对象的相似度尽可能地大:不同类对象之间的相似度尽可能地小.目前聚类的方法很多,根据基本思想的不同,大致可以将聚类算法分为五大类:层次聚类算法.分割聚类算法.基于约束的聚类算法.机器学习中的聚类算法和用于高维度的聚类算法.摘自 数据挖掘中的聚类分析研究综述 这篇论文. 1.层次聚类算法 1.1聚合聚类 1.1.1相似度依据距离不同:Single-Link:最近距离.Complete-Link:最远距离.Average-Link:平均距离 1.1.2最具代表性算法 1)CURE算