在之前的文章里,介绍了比较传统的K-Means聚类、Affinity Propagation(AP)聚类、比K-Means更快的Mini Batch K-Means聚类以及混合高斯模型Gaussian Mixture Model(GMM)等聚类算法,今天介绍一个比较近代的一类算法——Spectral Clustering 中文通常称为“谱聚类”。

Spectral Clustering(谱聚类,有时也简称SC),其实是一类算法的统称。它是一种基于图论的聚类方法(这点上跟AP类似,而K-Means是基于点与点的距离计算),它能够识别任意形状的样本空间且收敛于全局最有解,其基本思想是利用样本数据的相似矩阵进行特征分解后得到的特征向量进行聚类。

为什么上文称谱聚类是“一类”算法?广义上来说,任何在演算法中用到SVD/特征值分解的,都叫Spectral Algorithm。  从传统的PCA/LDA,到比较近的Spectral Embedding/Clustering,都属于这类。

谱聚类和传统的聚类方法(如 K-means)相比有不少优点:

Spectral Clustering 只需要数据之间的相似度矩阵就可以了,而不必像 K-Means 那样要求数据必须是 N 维欧氏空间中的向量。

由于抓住了主要矛盾,忽略了次要的东西,因此比传统的聚类算法更加健壮一些,对于不规则的误差数据不是那么敏感,而且结果也要好一些。事实上,在各种现代聚类算法的比较中,K-means 通常都是作为一个基准而存在的。

计算复杂度比 K-means 要小,特别是在像文本数据或者平凡的图像数据这样维度非常高的数据上运行的时候,理论上应该比K-Means更快速。(是这样吗?下文实验中有解答!)

K-Means一直以来都是距离算法中的经典算法,尤其通过minibatch“改良”后的K-Means在大数据应用中的效率瓶颈也得到极大改善。谱聚类这个相对的“晚生”是否真的如上述优点,接下来看实验数据。

实验一 关于准确度的较量

在此引用 Document clustering using locality preserving indexing 中关于K-means 和 Spectral Clustering 应用到TDT2 和 Reuters-21578这两组数据的准确率对比结果:

k

TDT2

Reuters-21578

K-Means

谱聚类

K-Means

谱聚类

2

0.989

0.998

0.871

0.923

3

0.974

0.996

0.775

0.816

4

0.959

0.996

0.732

0.793

9

0.852

0.984

0.553

0.625

10

0.835

0.979

0.545

0.615

从准确率结果可以看出,在不同的类别数量下,谱聚类的准确率都要高于K-Means。

实验二 关于运行时间的较量

在此使用Python机器学习库SKlearn中的spectral_clustering进行模拟实验,实验数据为随机生成的维度和样本量相同的矩阵,分别为10维、20维、30维。40维、50维、60维,对应到图中就是从0到5。其实我试着用更大的数据量去实验,但增加到70维的时候,spectral_clustering已经由于内存错误而崩掉了,所以足以看来他对于大数据量的应用还是不适合的。

另外,对于上文提到的spectral_clustering的计算复杂度要低于K-Means,因此理论上的运算时间要快,但实验结果却不能证明这个问题。大家可以点击原始程序查看 sc_kemans.py。

谱聚类应用

以下使用Python机器学习库SKlearn中的spectral_clustering进行聚类,目标是从一个图片中区分出人为构造出的图像边缘。

#coding:utf-8

importnumpy as np

importmatplotlib.pyplot as plt

fromsklearn.feature_extractionimportimage

fromsklearn.clusterimportspectral_clustering

# 生成原始图片信息

l = 100

x, y = np.indices((l, l))

center1 = (28, 24)

center2 = (40, 50)

center3 = (77, 58)

radius1, radius2, radius3 = 16, 14, 15

circle1 = (x - center1[0]) ** 2 + (y - center1[1]) ** 2

circle2 = (x - center2[0]) ** 2 + (y - center2[1]) ** 2

circle3 = (x - center3[0]) ** 2 + (y - center3[1]) ** 2

# 生成包括3个圆的图片

img = circle1 + circle2 + circle3

mask = img.astype(bool)

img = img.astype(float)

img += 1 + 0.2 * np.random.randn(*img.shape)

graph = image.img_to_graph(img, mask=mask)

graph.data = np.exp(-graph.data / graph.data.std())

# 聚类输出

labels = spectral_clustering(graph, n_clusters=3)

label_im = -np.ones(mask.shape)

label_im[mask] = labels

plt.matshow(img)

plt.matshow(label_im)

plt.show()

以下是运行结果:

左边的图形是人为生成的原始图片,右边是识别图形边缘后的处理图片。

spectral_clustering可配置的参数如下,其中最主要的参数是affinity(数据集), n_clusters(聚类数)和assign_labels(聚类方法可选kmeans[默认], discretize):

sklearn.cluster.spectral_clustering(affinity, n_clusters=8, n_components=None, eigen_solver=None, random_state=None, n_init=10, eigen_tol=0.0, assign_labels='kmeans')

谱聚类的应用场景:

图像切割;

数据聚类

尾巴

谱聚类适用的数据集有几个特点:

不适合聚类类别数特别多的数据;

对于特殊数据集具有比较好的适应性,例如环形数据、非凸数据、交叉数据等非正常或规则下的数据,如下图:

====================【好书推荐,我为自己代言】====================

《Python数据分析与数据化运营》第二版上市啦!

50+数据流工作知识点14个数据分析与挖掘主题8个综合性运营分析案例涵盖会员、商品、流量、内容4大主题360°把脉运营问题并贴合数据场景落地

本书主要基于Python实现,其中主要用到的计算库是numpy、pandas和sklearn,其他相关库还包括:

标准库:re、time、datetime、json、 base64、os、sys、cPickle、tarfile

Python调用R的rpy2

统计分析:Statsmodels

中文处理:结巴分词

文本挖掘:Gensim

数据挖掘和算法:XGboost、gplearn、TPOT

爬虫和解析:requests、Beautiful Soup、xml

图像处理:OpenCV和PIL/Pollow

数据读取:xlrd、pymongo、pymysql

数据预处理:imblearn

展示美化类:Matplotlib、pyecharts、graphviz、prettytable、wordcloud、mpl_toolkits、pydotplus

如果你对以下内容感兴趣,那么本书将值得一看:

KMeans聚类的自动K均值的确立方法

基于软方法的多分类模型组合评估模型的应用

基于自动下探(下钻、细分)的应用

基于增量学习的多项式贝叶斯分类

pipeline管道技术的应用

基于超参数的自动参数值的优化方法

特征自动选择

文本分类、文本主题挖掘

基于自动时间序列ARIMA的P、D、Q的调整

python决策树规则输出

基于自定义图像的文本标签云

非结构化数据,例如图像、音频、文本等处理

对象持久化处理

如何使用Python调用R实现数据挖掘

自动化学习:增加了对于自动化数据挖掘与机器学习的理论、流程、知识和应用库介绍,并基于TPOT做自动化回归和分类学习案例演示

有关这本书的写作感受、详细内容介绍、附件(含数据和代)下载、关键知识和方法以及完整书稿目录,请访问《Python数据分析与数据化运营》第二版出版了!要购买此书,可以去京东、当当和天猫等查看。

python谱聚类算法_谱聚类Spectral clustering(SC)相关推荐

  1. python谱聚类算法_谱聚类(spectral clustering)原理总结

    谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...

  2. python谱聚类算法_谱聚类 - python挖掘 - 博客园

    谱聚类(Spectral Clustering,SC)是一种基于图论的聚类方法,将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量远.能够识别任意形状的样本空间且收敛于全 ...

  3. 谱聚类算法及其代码(Spectral Clustering)

    简介 文章将介绍谱聚类(spectral clustering)的基本算法,以及在matlab下的代码实现.介绍内容将包括: 从图分割角度直观理解谱聚类 谱聚类算法步骤 数据以及实现代码 本文将不会涉 ...

  4. 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut .

    聚类算法是ML中一个重要分支,一般采用unsupervised learning进行学习,本文根据常见聚类算法分类讲解K-Means, K-Medoids, GMM, Spectral cluster ...

  5. 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut

    聚类算法是ML中一个重要分支,一般采用unsupervised learning进行学习,本文根据常见聚类算法分类讲解K-Means, K-Medoids, GMM, Spectral cluster ...

  6. 聚类算法K-Means K-Medoids GMM Spectral clustering,Ncut

    聚类算法是ML中一个重要分支,一般采用unsupervised learning进行学习,本文根据常见聚类算法分类讲解K-Means, K-Medoids, GMM, Spectral cluster ...

  7. 现代分层、聚集聚类算法_分层聚类:聚集性和分裂性-解释

    现代分层.聚集聚类算法 Hierarchical clustering is a method of cluster analysis that is used to cluster similar ...

  8. 聚类算法_层次聚类_密度聚类(dbscan,meanshift)_划分聚类(Kmeans)详解

    注: 两整天的成果,谬误之处勿喷 1 聚类概述 样本 没有训练的样本 没有标注的样本 1.1 相似度度量 1.1.1 距离相似度度量 距离度量 dist(oi,oj)dist(o_{i},o_{j}) ...

  9. Python基于聚类算法实现密度聚类(DBSCAN)计算

    本文实例讲述了Python基于聚类算法实现密度聚类(DBSCAN)计算.分享给大家供大家参考,具体如下: 算法思想 基于密度的聚类算法从样本密度的角度考察样本之间的可连接性,并基于可连接样本不断扩展聚 ...

最新文章

  1. 基于NB-IoT的智慧路灯监控系统(NB-IoT专栏—实战篇1:项目简介)
  2. dell 远程访问管理卡iDRAC 7
  3. PMcaff专属产品经理的免费培训课,3月8日北京站第一期开课倒计时!
  4. 另一种方式实现事务码SE16里的结果集修改
  5. STM32——流水灯
  6. 深入研究java.lang.Runtime类【转】
  7. php复习,PHP排序算法的复习和总结
  8. PCL综述—三维图像处理
  9. centos下安装opencv
  10. 苹果华人工程师被捕后续,按“商业间谍”指控,本人不认罪
  11. 网络篇-NSURLSession介绍
  12. poj 3461 Oulipo kmp 预处理
  13. python-83:公务员时间源码 V-0.1
  14. 水中贵族 || 百岁山的“骚路子”营销
  15. [转] 香港流行乐坛三十年
  16. PDF英文快速翻译为中文
  17. AsposeWord转pdf的正确姿势
  18. 多元线性回归分析spss结果解读_多重线性回归分析SPSS操作与解读
  19. 畅游或将私有化退市股价涨近50%,搜狐“吃饱”后能重回巅峰吗?
  20. 如何开通公众号留言功能?

热门文章

  1. shell的debug模式
  2. bootstrap-daterangepicker插件运用
  3. gravity 时序图绘制,改
  4. 查看系统表存储过程名称
  5. SharePoint2010网站备份还原简单介绍
  6. 在window下搭建TensorFlow
  7. 内核抢占,让世界变得更美好 | Linux 内核
  8. 使用monkey命令来打开一个app
  9. 大佬为何可以把单片机描述得如此形象生动?
  10. Linux内核0.12完全注释