文章目录

  • 基本原理
  • sklearn中谱聚类的构造
  • 实战

基本原理

谱聚类是一种基于图论的聚类方法,所谓图,就是将空间中的所有点连接起来,只要这些连接中出现了一个圈,就可以称之为图。如果把这些连线加上一个权重,就叫做加权图。

如果连线越长则权重越小,连线越短则权重越大,然后把权重最小的边切断,使得一个图变成两个图,便完成了一次聚类,这就是谱算法的基本思路,而其基本流程,就是构图->切图。

所以,问题来了,如何构图?若将所有的点都连接起来,这显然有些离谱,毕竟这种平方级别的复杂度不是一般内存能吃得消的,作为有一点聚类基础的人,第一时间就会想到KNN算法,即k近邻。

由于谱聚类中,两个点是否要被切断,最关键的因素是短边而非长边,所以只要将点与其最近的k个点连接起来就行了。这样得到的图有一个问题,即x最近的k个点中可能有y,但y最近的k个点中可能没有x,像极了女神和你。

对此有两种解决方案,一种是x也不要y了,另一种是强制让x加入到y的近邻中。

除了k近邻之外,还可以定死一个距离r,凡是距离小于r的都连线,大于r的都不连线。由于点和点之间的距离往往相差较大,故其权重一般会在距离的基础上做一些变换,这个变换在下文乘坐权重函数。

sklearn中谱聚类的构造

sklearn中,谱聚类的构造函数为

SpectralClustering(n_clusters=8, *, eigen_solver=None, n_components=None, random_state=None, n_init=10, gamma=1.0, affinity='rbf', n_neighbors=10, eigen_tol='auto', assign_labels='kmeans', degree=3, coef0=1, kernel_params=None, n_jobs=None)

其中affinity参数表示构图方法,可以输入字符串或者sklearn.metrics.pairwise.pairwise_kernels中的函数,当输入字符串时:

  • nearest_neighbors: 表示采用最邻近算法
  • rbf:即rbf方法,表达式为e−γdij2e^{-\gamma d_{ij}^2}e−γdij2​,dijd_{ij}dij​表示点i和j的距离。

pairwise_kernels中,还支持5种变换方法:rbf,sigmoid, polynomial/poly, linear, cosine

当选择最近邻算法时,可通过参数n_neighbors来设置最近邻的个数,即KNNK

当选择rbf时,可通过参数gamma来设置权重函数的系数γ\gammaγ。

当选择poly或者polynomial时,表示采用多项式函数,可通过degree来设置最高次的值。

当采用多项式或者sigmoid时,可通过coef0来设置0阶项系数。

通过kernel_params可以设置更加复杂的权重函数的系数。

此外,还有如下常用的参数

  • n_clusters 聚类数
  • eigen_solver 特征值分解策略,可选'arpack', 'lobpcg''amg';其中amg要求安装pyamg,可以更快地处理大规模样本,但可能有点不稳定;
  • random_state:随机数种子,便于结果复现
  • n_init:k-means算法的初值个数
  • eigen_tol:精度要求
  • assign_labels:表示分配标签的策略,可选kmeans, discretizecluster_qr
  • n_jobs 并行数

实战

import numpy as np
from sklearn import datasets
from sklearn.cluster import SpectralClustering
import matplotlib.pyplot as pltX, y = datasets.make_circles(n_samples=1000, factor=0.5, noise=0.05)fig = plt.figure()# 谱聚类默认聚类数为8
model = SpectralClustering().fit(X)
ax = fig.add_subplot(131)
ax.scatter(X[:,0], X[:,1], c=model.labels_, marker='.')model = SpectralClustering(n_clusters=2).fit(X)
ax = fig.add_subplot(132)
ax.scatter(X[:,0], X[:,1], c=model.labels_, marker='.')model = SpectralClustering(n_clusters=2, affinity="nearest_neighbors").fit(X)
ax = fig.add_subplot(133)
ax.scatter(X[:,0], X[:,1], c=model.labels_, marker='.')plt.show()

效果为

SpectralClustering有一个成员是affitiny_matrix_,存储了连接矩阵,将其调出后,可绘制具体的图

model = SpectralClustering( affinity="nearest_neighbors").fit(X)
inds = model.affinity_matrix_.nonzero()
inds = np.array(inds).Tfor ind in inds:tmp = plt.plot(X[ind,0], X[ind, 1], c='g', lw=0.5)plt.scatter(X[:,0], X[:,1], c=model.labels_, marker='o')plt.show()

效果为

sklearn聚类之谱聚类SpectralClustering相关推荐

  1. Python计算机视觉编程第六章——图像聚类(K-means聚类,DBSCAN聚类,层次聚类,谱聚类,PCA主成分分析)

    Python计算机视觉编程 图像聚类 (一)K-means 聚类 1.1 SciPy 聚类包 1.2 图像聚类 1.1 在主成分上可视化图像 1.1 像素聚类 (二)层次聚类 (三)谱聚类 图像聚类 ...

  2. 机器学习算法之 K-means、层次聚类,谱聚类

    k-means 和层次聚类都属于划分聚类,实际中最常用的是k-means,k-means效果不好的情况下才会采用其他聚类 K-means算法 K-means算法,也称为K-平均或者K-均值,是一种使用 ...

  3. 关于距离,K-means,层次聚类,密度聚类以及谱聚类

    目录 相似度/距离 k-Means算法 衡量聚类(轮廓系数) 层次聚类 密度聚类 谱聚类 之前博客中讲的模型基本上都是分类以及回归模型,他们都是属于有监督学习的,意为所有的样本都有一个结果值提供,我们 ...

  4. K-Means算法、层次聚类、密度聚类及谱聚类方法详述

    1.聚类算法概述 (1)什么是聚类? 聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小,属于无监督学习. 聚类 ...

  5. 了解聚类是什么。聚类方法:k-means、核聚类、层次聚类、谱聚类

    聚类 1.什么是聚类 2.聚类方法 2.1 划分式聚类方法 k-means k-means++ bi-kmeans 基于密度的方法 DBSCAN OPTICS算法 层次化聚类算法 核聚类 支持向量聚类 ...

  6. 机器学习笔记六:K-Means聚类,层次聚类,谱聚类

    前面的笔记搞了那么多的数学,这篇来一点轻松的,提前适应一下除了监督问题以外的非监督学习.这篇笔记有没有前面那么多的数学了,要讲的聚类算是无监督的学习方式. 一.一般问题 聚类分析的目标是,创建满足于同 ...

  7. matlab中有没有谱聚类,matlab – 谱聚类

    首先我必须说我是matlab的新手(以及这个网站--),所以请原谅我的无知. 我正在尝试在matlab中编写一个函数,它将使用Spectral Clustering将一组点分成两个簇. 我的代码如下 ...

  8. sklearn学习谱聚类

    原文链接 1. sklearn谱聚类概述 \qquad在sklearn的类库中,sklearn.cluster.SpectralClustering实现了基于Ncut的谱聚类,没有实现基于RatioC ...

  9. 聚类算法小结(2)——谱聚类算法

    上一篇博客中简单介绍了K均值聚类算法,在本篇博客中介绍一下关于谱聚类算法,简单谈一谈自己的心得.简单介绍一下谱聚类算法 谱聚类算法建立在谱图理论基础上,与传统的聚类算法相比,它具有能在任意形状的样本空 ...

最新文章

  1. iOS 发布APP关于IDFA的相关内容
  2. 下一代搜索引擎长啥样?Google 给出了TA的答案
  3. FPGA加载bit文件可以工作,加载mcs不能工作的原因
  4. ARKit从入门到精通(5)-ARScnView介绍
  5. Angular如何对包含了HTTP请求的服务类进行单元测试
  6. Frog Jumps CodeForces - 1324C(二分)
  7. 你所不了解的五条面试忠告
  8. 扔盘子(51Nod-1279)
  9. 鼓励自己最有效的20个方法
  10. 给还是不给?又一个国家要求苹果必须为iPhone 12提供充电器
  11. c 语言中out的作用,C语言outData+是什么意思做什么用?
  12. 超越Excel、python的数据可视化报表,月薪3W的人都在用
  13. 使用Data URI Scheme优雅的实现前端导出csv
  14. Android【报错】xxx cannot be resolved to a type 错误解决方法
  15. oppo 系列手机刷机教程
  16. matlab符号运算变量替换成小数时避免出现分数的小技巧
  17. 怎么把linux装入移动硬盘,把Ubuntu装进你的移动硬盘中
  18. html5 mp4在线播放器,HTML5 Web播放器-Video.js
  19. 【AIOT】HumanCenteredSensing
  20. javadoc 创建html,javadoc html标签

热门文章

  1. TIOBE 6月编程语言排行榜:C语言仍为榜首,Java紧随其后!
  2. 艺工交叉之神--达芬奇
  3. win7硬件要求_九代酷睿平台装Win7的方法!2019年九代i5-9400F配B365装机配置单
  4. 数值型数据和标称型数据
  5. 大数据开源架构包括哪些?
  6. 如何减少Outlook数据文件的大小
  7. 推荐系统实践读书笔记
  8. 关于串口编程的(一)
  9. 管理软件包
  10. [小黄书小程序]导航栏和标题栏界面