首页 > 其他分享 >【scikit-learn基础】--『监督学习』之 谱聚类

【scikit-learn基础】--『监督学习』之 谱聚类

时间:2024-01-18 09:44:49浏览次数:33  
标签:learn -- scikit 矩阵 regs moon plt 聚类 circle

谱聚类算法基于图论,它的起源可以追溯到早期的图分割文献。
不过,直至近年来,受益于计算机计算能力的提升,谱聚类算法才得到了广泛的研究和关注。

谱聚类被广泛应用于图像分割、社交网络分析、推荐系统、文本聚类等领域。
例如,在图像分割中,谱聚类可以有效地将图像划分为背景和前景;
在社交网络分析中,它可以识别出不同的社区结构。

1. 算法概述

谱聚类的基本原理是将数据点视为图中的顶点,根据数据点之间的相似性构建图的边。
它首先计算图的拉普拉斯矩阵的特征向量,然后利用这些特征向量进行聚类。
这种方法能够捕捉到数据的非线性结构,因此在许多应用中表现优异。

所谓拉普拉斯矩阵,是一种用于表示一个图的矩阵形式。
对于给定的一个有\(n\)个顶点的图\(G\),它的拉普拉斯矩阵定义为\(L=D-A\)。
其中\(D\)为图的度矩阵,\(A\)为图的邻接矩阵

2. 创建样本数据

为验证谱聚类的效果,用scikit-learn中的样本生成器创建2个非线性结构的数据集。

from sklearn.datasets import make_moons, make_circles

fig, axes = plt.subplots(nrows=1, ncols=2)
fig.set_size_inches((8, 4))

X_moon, y_moon = make_moons(noise=0.05, n_samples=1000)
axes[0].scatter(X_moon[:, 0], X_moon[:, 1], marker="o", c=y_moon, s=25, cmap=plt.cm.spring)

X_circle, y_circle = make_circles(noise=0.05, factor=0.5, n_samples=1000)
axes[1].scatter(X_circle[:, 0], X_circle[:, 1], marker="o", c=y_circle, s=25, cmap=plt.cm.winter)

plt.show()

image.png
一个交错的月牙形式,一个是同心圆形式,都是很难线性分割的数据集。

3. 模型训练

首先,用默认的参数训练看看效果:

from sklearn.cluster import SpectralClustering

# 定义
regs = [
    SpectralClustering(n_clusters=2),
    SpectralClustering(n_clusters=2),
]

# 训练模型
regs[0].fit(X_moon, y_moon)
regs[1].fit(X_circle, y_circle)

fig, axes = plt.subplots(nrows=1, ncols=2)
fig.set_size_inches((8, 4))

# 绘制聚类之后的结果
axes[0].scatter(
    X_moon[:, 0], X_moon[:, 1], marker="o", c=regs[0].labels_, s=25, cmap=plt.cm.spring
)

axes[1].scatter(
    X_circle[:, 0], X_circle[:, 1], marker="o", c=regs[1].labels_, s=25, cmap=plt.cm.winter
)

plt.show()

image.png
从图中可以看出,聚类的效果不是很好,从颜色上看,与原始数据的类别相比差距较大。

接下来,调整下SpectralClustering模型的affinity参数,
这个参数的作用是定义数据点之间的相似度矩阵的计算方法。
affinity参数的可选值常用的有两个:

  1. nearest_neighbors:通过计算最近邻图来构建亲和矩阵
  2. rbf:使用径向基函数 (RBF) 内核构建亲和矩阵。

默认的值是 rbf,下面我们试试nearest_neighbors方式的聚类效果。
将上面的代码中 regs 的定义部分换成如下代码:

regs = [
    SpectralClustering(n_clusters=2, affinity="nearest_neighbors"),
    SpectralClustering(n_clusters=2, affinity="nearest_neighbors"),
]

image.png
修改参数之后的聚类效果与原始数据就非常接近了。

4. 总结

简而言之,谱聚类是一个在图上进行聚类的方法,它试图找到图的最佳切割,使得同一簇内的边的权重尽可能大,而不同簇之间的边的权重尽可能小。

这种聚类算法的优势有:

  1. 可以捕获数据的非线性结构
  2. 对噪声和异常值相对鲁棒
  3. 不需要明确的形状假设,适用于各种形状的簇

它的局限性有:

  1. 计算复杂度相对较高,尤其是对于大规模数据
  2. 需要提前确定簇的数量,这在很多实际应用中是一个挑战
  3. 对于高维数据,可能存在“维度诅咒”问题,尽管可以通过降维缓解,但增加了计算复杂度

标签:learn,--,scikit,矩阵,regs,moon,plt,聚类,circle
From: https://www.cnblogs.com/wang_yb/p/17971806

相关文章

  • 链表(2)
    目录链表相交链表相交具体思路:如果链表相交,那么后续的长度肯定是一样的,所以直接从后续长度一样的地方开始判断两个链表是否相等classSolution{public:ListNode*getIntersectionNode(ListNode*headA,ListNode*headB){ListNode*dummyA=newListNode(-1......
  • Kuiper 管理控制台使⽤⽂档
    下载可以从https://hub.docker.com/r/emqx/kuiper-manager拉⼀个Kuiper-manager的docker镜像,⾸先进⼊dockerhub查看所需要下载的镜像的tag版本。(以下$tag代表镜像的tag信息,例如0.0.1)对于下载华为IEF版本的Kuiper管理控制台镜像,需要在tag信息后加⼊-ief......
  • mac m1 golang 运行go项目没法dbg解决
    1.首先终端看 uname-m如果是显示armd的话就是m12.go版本需要安装arm64版本(macm1) 3.golang编辑器也要安装m1版本的 4.dbg成功 ......
  • 数据探索之道:查询Web API数据中的JSON字符串列
    前言在当今数据驱动的时代,对数据进行探索和分析变得愈发关键。WebAPI作为广泛应用的数据源,提供了丰富的信息和资源。然而,面对包含JSON字符串列的WebAPI数据时,我们常常遇到一个挑战:如何高效灵活地处理和查询这些数据?这个问题在数据探索和提取过程中频繁出现。因此小编今天以葡萄......
  • 如何做标准化?| 京东云技术团队
    在现代信息化的市场环境和社会中,标准化已经成为了各种行业的一个重要的标志。标准化不仅可以提升生产效率,减轻质量问题,还可以增加产品的可靠性和互通性。在这篇文章中,我们将探讨如何做标准化,为您提供详细的指导和建议。    一、了解标准化的定义和意义标准化是一个广泛......
  • 享元模式
    把一些常用且不变的对象保存在一个队列里,每次优先从队列中取,没取到则新创建一个,再将它插入队列以供后续使用定义:提供了减少对象数量从而改善应用所需的对象结构的方式,运用共享技术有效的支持大量细粒度的对象类型:结构型适用场景:常常应用于系统底层的开发,以便解决系统的......
  • sqlmap使用教程
    sqlmap使用教程目录sqlmap使用教程1、介绍2、常用参数3、tamper脚本4、使用示例基础使用进阶使用直接使用5、案例演示案例一:使用Sqlmap获取DVWA数据案例二:利用unmagicquotes脚本绕过magicquotes1、介绍SQLMAP是一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接......
  • 移动端下单系统验货流程
    功能介绍: 司机出厂出示验货码,验货人用微信扫验货码验货,验货界面显示字段:车号、煤种、供应商、入库库房等,验货成功确认收货司机可以出厂,不验货出不去。为了控制验货人的权限,必须绑定微信注册程序和后台授权信息成功,才能扫验货码成功,其他人扫码会失败!部分截图:     ......
  • JavaScript(JS) 判断没有属性的空对象{}的四种方法
    ​ JavaScript(JS)中对象没有属性初始化时,可能使用{}进行初始化,如此我们判断这样的没有属性的空对象就不是很方便,本文主要介绍JavaScript(JS)中判断没有属性的空对象{}的五种方法,以及相关的示例代码。1、通过JSON.stringify()判断可以使用JSON.stringify()将Javascript对象......
  • 向日葵远程控制软件有漏洞
    一个老新闻:https://net.ccsfu.edu.cn/info/1263/1543.htm刚刚看到,远程这些远程控制软件也是可能存在问题的呢。......