python谱聚类算法_谱聚类Spectral clustering(SC)

在之前的文章里,介绍了比较传统的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数据分析与数据化运营》第二版出版了!要购买此书,可以去京东、当当和天猫等查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1807. 替换字符串中的括号内容(哈希map)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s ,它包含一些括号对,每个括号中包含一个 非空 的键。 比方说,字符串 "(name)is(age)yearsold" 中,有 两个 括号对,分别包含键 “name” 和 “age” 。 你知…

bootice.exe linux 启动盘,下载BOOTICE来把你的U盘做成启动盘

为了方便维护电脑,需要制作一个合适的U盘启动盘。网上制作U盘启动盘的工具也有很多,我下面使用bootice这个U盘启动盘制作工具来制作U盘启动盘。下载BOOTICE1、BOOTICE>分区管理G,对U盘进行格式化,FAT16,卷标设置为G…

数据类型的选择

1、CHAR与VARCHAR CHAR与VARCHAR类型类似,都用来存储字符串。 CHAR:固定长度,处理速度较VARCHAR快,但浪费空间。 VARCHAR:可变长度 1 CHAR(4)和VARCHAR(4)列检索的值并不总相同,CHAR列删除了尾部的空格 2、…

excel打开空白_啥?下载的文件显示“文件已损坏,无法打开”?

推荐文章:Windows10系统的优化工具神器对于一个开发人员的我,这两天在网站做一个导出Excel表格功能,遇到了一个坑。在本地测试导出并且可以打开,但是到了测试环境导出打开却显示“文件已损坏,无法打开”。刚开始以为是…

erp故障处理流程图_PLC故障常见原因及处理方法!

欢迎关注“热控圈 ” ID:rekongquan传播热控知识,分享技术精华!第一部分、运行中PLC故障常见原因及处理方法(一)、外围电路元器件故障此类故障在PLC工作一定时间后的故障中经常发生。在PLC控制回路中如果出现元器件损坏故障,PLC控…

LeetCode 1808. 好因子的最大数目(整数拆分,乘积最大)

文章目录1. 题目2. 解题1. 题目 给你一个正整数 primeFactors 。你需要构造一个正整数 n ,它满足以下条件: n 质因数(质因数需要考虑重复的情况)的数目 不超过 primeFactors 个。n 好因子的数目 最大化。 如果 n 的一个因子可以…

请输入星期的第一个字母c语言,C语言经典案例:请输入星期几的第一个字母来判断一下是星期几,...

需求描述:请输出礼拜几的第一个字母来断定一下是礼拜几,假如第一个字母一样,则持续断定第二个字母。C语言案例分析:用情形语句比拟好,假如第一个字母一样,则断定用情形语句或if语句断定第二个字母。实现代码…

实用crontab命令

常用crontab如下: crontab -e 编辑 crontabcrontab -l 显示 crontabcrontab -r 删除 crontabcrontab -v 显示上一次编辑 crontab 的时间,但不是所有系统适用。 编辑crontab在指令模式輸入 "crontab -e" 便会用预设编辑器打开 crontab &#…

安卓apk签名提取工具_Android测试工具入门介绍(二)

今天我们来讲讲一款牛逼的安卓集成工具:就是大名还算顶顶的AndroidKill;先来个软件界面截图:多么简单有华丽的界面啊!我说的是功能华丽,该有的功能他都有。首先我们先点开菜单中的Android,配置下APKTOOL管理…

atoi函数_每日一道 LeetCode (50):字符串转换整数 (atoi)

❝每天 3 分钟,走上算法的逆袭之路。❞前文合集每日一道 LeetCode 前文合集代码仓库GitHub:https://github.com/meteor1993/LeetCodeGitee:https://gitee.com/inwsy/LeetCode题目:最长回文子串难度:「中等」题目来源&a…

面向对象4大特性的作用

文章目录1. 封装2. 抽象3. 继承4. 多态学习自 极客时间《设计模式之美》 1. 封装 隐藏保护内部数据,不被随意修改,提高可维护性仅暴露必要的接口,提高易用性 2. 抽象 提高代码可扩展、可维护性,修改不需要改变定义,…

计算机c语言二级试题及答案,计算机c语言二级考试试题及其答案.doc

计算机二级试题一选择题(1)下列叙述中正确的是A)算法的效率只与问题的规模有关,而与数据的存储结构无关B)算法的时间复杂度是指执行算法所需要的计算工作量C)数据的逻辑结构与存储结构是一一对应的D)算法的时间复杂度与空间复杂度一定相关(2)在结构化程序设计中&…

远程连接Kali Linux使用PuTTY实现SSH远程连接

远程连接Kali Linux使用PuTTY实现SSH远程连接 本书主要以在Android设备上安装的Kali Linux操作系统为主,介绍基于Bash Shell渗透测试。由于在默认情况下,在Android设备上安装的Kali操作系统没有安装任何工具。如果直接在手机或平板上安装一些软件时&…

python 百度ocr安装_Python调用百度OCR实现图片文字识别的示例代码

百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下:创建后会获得如下信息: APP_ID ****** API_KE…

哪些代码设计看似是面向对象,实际是面向过程的?

文章目录1. 滥用 getter、setter 方法2. 滥用全局变量、全局方法3. 数据、方法分离学习自 极客时间《设计模式之美》 1. 滥用 getter、setter 方法 违反了封装特性,风格退化为面向过程编程 2. 滥用全局变量、全局方法 Constants 类 所有的常量都放在这个类中&…

vue 图片拖动加载 类似于地图_前端性能优化之图片懒加载(附vue自定义指令)...

作者:lzg9527链接:https://juejin.cn/post/6903774214780616718在类电商类项目,往往存在大量的图片,如 banner 广告图,菜单导航图,美团等商家列表头图等。图片众多以及图片体积过大往往会影响页面加载速度&…

四元数c语言,C + OpenGL四元数

didierc..6对于你的第一个问题,我认为你的意思是"我如何代表",而不是"解释".最简单的方法是使用struct:typedef struct quaternion_t {double x,y,z,w;} quaternion_t;请注意,如上所述,通常的做法也是使用x,y,z和w作为组件名称(但只要您知道哪个是哪个,您的…

POJ-3154-Graveyard

题目:POJ-3154-Graveyard 一个周长为10000的圆圈,一开始等距的安放着N个雕塑,现在想增加M个雕塑,使得雕塑之间还是等距,问坟墓最少移动的距离。 思路:只有n个时设周长为1,则坐标为i/n&#xff0…

vant toast 指定挂载到指定位置_docker卷挂载技术

卷技术,容器内部数据映射到宿主机上一、直接使用命令来挂载docker run -it -v /home/test:/home centos /bin/bash# 在主机上查看 docker运行容器的id [rootlocalhost home]# docker ps CONTAINER ID IMAGE COMMAND CREATED …

数据仓库 Hive(内含大数据镜像下载)

文章目录1. 特点2. Hive 体系架构3. 安装 Hive3.1 安装 MySQL3.2 安装 Hive3.3 配置 Hive4. 实践4.1 函数4.2 Hive Shell安装没成功:直接用现成的镜像 大数据Linux实验环境虚拟机镜像文件 http://dblab.xmu.edu.cn/blog/1645-2/ cloudera-quickstart-vm-集成了大数据…