【scikit-learn基础】--『监督学习』之 空间聚类
空间聚类算法是数据挖掘和机器学习领域中的一种重要技术。
本篇介绍的基于密度的空间聚类算法的概念可以追溯到1990年代初期。
随着数据量的增长和数据维度的增加,基于密度的算法逐渐引起了研究者的关注。
其中,DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是最具代表性的算法之一。
基于密度的空间聚类算法在许多领域都有应用,例如图像处理、生物信息学、社交网络分析等。
在图像处理中,该算法可以用于检测图像中的密集区域,用于识别物体或形状。
1. 算法概述
DBSCAN算法的基本思想是,对于给定的数据集,基于数据点的密度进行聚类。
在密度高的区域,数据点更为集中,而密度低的区域数据点较为稀疏。
基于密度的算法能够发现任意形状的簇,并且对噪声有较好的鲁棒性。
算法的核心在于:
- 定义邻域:对于数据集中的每个点,其邻域是由距离该点在一定半径(通常称为Eps)内的所有点组成的
- 定义密度:一个点的密度是其邻域内的点的数量。如果一个点的密度超过某个阈值(通常称为MinPts),则该点被视为核心点
- 寻找簇:从每个核心点出发,找到所有密度可达的点,即这些点通过一系列核心点可以与该核心点相连,这些点形成一个簇
- 标记噪声点:不属于任何簇的点被标记为噪声点
2. 创建样本数据
下面,创建三种不同的样本数据,来测试DBSCAN的聚类效果。
from sklearn.datasets import make_blobs, make_moons, make_circles
fig, axes = plt.subplots(nrows=1, ncols=3)
fig.set_size_inches((9, 3))
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,
)
X_blob, y_blob = make_blobs(n_samples=1000, centers=3)
axes[2].scatter(
X_blob[:, 0],
X_blob[:, 1],
marker="o",
c=y_blob,
s=25,
cmap=plt.cm.autumn,
)
plt.show()

3. 模型训练
用scikit-learn的DBSCAN模型来训练,这个模型主要的参数有两个:
- eps (eps):这个参数表示邻域的大小,或者说是邻域的半径。具体来说,对于数据集中的每个点,其 eps-邻域包含了所有与该点的距离小于或等于
eps的点。 - min_samples (minPts):在给定 eps-邻域内,一个点需要有多少个邻居才能被视为核心点。
通过调节这2个参数,基于上面创建的样本数据,训练效果如下:
from sklearn.cluster import DBSCAN
# 定义
regs = [
DBSCAN(min_samples=2, eps=0.1),
DBSCAN(min_samples=2, eps=0.2),
DBSCAN(min_samples=3, eps=2),
]
# 训练模型
regs[0].fit(X_moon, y_moon)
regs[1].fit(X_circle, y_circle)
regs[2].fit(X_blob, y_blob)
fig, axes = plt.subplots(nrows=1, ncols=3)
fig.set_size_inches((9, 3))
# 绘制聚类之后的结果
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,
)
axes[2].scatter(
X_blob[:, 0],
X_blob[:, 1],
marker="o",
c=regs[2].labels_,
s=25,
cmap=plt.cm.autumn,
)
plt.show()

针对3种不同的样本数据,调节参数之后,聚类的效果还不错。
感兴趣的话,可以试试修改上面代码中的DBSCAN定义部分的参数:
# 定义
regs = [
DBSCAN(min_samples=2, eps=0.1),
DBSCAN(min_samples=2, eps=0.2),
DBSCAN(min_samples=3, eps=2),
]
调节不同的 min_sample和eps,看看不同的聚类效果。
4. 总结
总的来说,基于密度的空间聚类算法是一种强大的工具,能够从数据中提取有价值的信息。
但是,如同所有的算法一样,它也有其局限性,需要在合适的应用场景中使用,才能达到最佳的效果。
它的优势主要在于:
- 能够发现任意形状的簇
- 对噪声和异常值有较好的鲁棒性
- 不需要提前知道簇的数量
不足之处则在于:
- 对于高维数据,密度计算可能会变得非常复杂和计算量大
- 算法的性能高度依赖于密度阈值的选择
- 在处理密度变化较大的数据时可能效果不佳
【scikit-learn基础】--『监督学习』之 空间聚类的更多相关文章
- Python基础『一』
内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...
- Python基础『二』
目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...
- 『cs231n』计算机视觉基础
线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- 『计算机视觉』Mask-RCNN
一.Mask-RCNN流程 Mask R-CNN是一个实例分割(Instance segmentation)算法,通过增加不同的分支,可以完成目标分类.目标检测.语义分割.实例分割.人体姿势识别等多种 ...
- 『计算机视觉』FPN:feature pyramid networks for object detection
对用卷积神经网络进行目标检测方法的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度.FPN是ResNet或DenseNet等通用特征提取网络的附加组件,可 ...
- [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装
[原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...
- 『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布
项目原因: 参与过各种 分布式项目,有 Socket,Remoting,WCF,当然还有最常用的可以跨平台的 WebService. 分布式编码的时间浪费: 但是,无一例外的,开发分布式程序的开发遵循 ...
- [日推荐] 『Streeter』极乐商店邀你一起来尬舞啊!-store.dreawer.com
你听的舞蹈有哪些?Jazz?Poppin?Hiphop?现代舞?民族舞?... 今天推荐一款小程序『Streeter』,几乎包含所有舞蹈视频,偷偷学好了,邀请你来尬舞啊 Streeter 这个Logo ...
- 『TensorFlow』专题汇总
TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...
随机推荐
- 8、switch语句
1.switch语句:"开关" switch是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较,并根据匹配执行代码块.它可以被认为是一种惯用的方式来写多个if else子句 ...
- 2023年国家基地“楚慧杯”网络安全实践能力竞赛初赛-Crypto+Misc WP
Misc ez_zip 题目 4096个压缩包套娃 我的解答: 写个脚本直接解压即可: import zipfile name = '附件路径\\题目附件.zip' for i in range(40 ...
- MySQL运维10-Mycat分库分表之一致性哈希分片
一.一致性哈希分片 一致性哈希分片的实现思路和我们之前介绍的水平分表中的取模分片是类似的.只不过取模分片,采用的是利用主键和分片数进行取模运算,然后根据取模后的结果,将数据写入到不同的分片数据中.但是 ...
- 文心一言 VS 讯飞星火 VS chatgpt (162)-- 算法导论13.1 2题
二.用go语言,对图13-1中的红黑树,画出对其调用TREE-INSERT 操作插人关键字 36 后的结果.如果插人的结点被标为红色,所得的树是否还是一棵红黑树?如果该结点被标为黑色呢? 文心一言,代 ...
- MyBatis中获取参数值的两种方式:${} 和 #{},以及它们之间区别是什么?
MyBatis中获取参数值的两种方式 ${}:的本质就是字符串拼接 #{}:的本质就是占位符赋值 ① 使用${}占位符,在字符串拼接的方式拼接sql,若为字符串类型或为日期类型的字段进行赋值时,需要手 ...
- nginx-下载安装与配置
nginx下载 从官网下载,使用命令在linux下载即可,这个是目前稳定版最新的1.24.0版本,如果想要用旧版本直接修改版本号即可(旧版本我用的是1.12.2) 下载需要使用wget命令,默认是没有 ...
- 文心一言 VS 讯飞星火 VS chatgpt (170)-- 算法导论13.2 3题
三.用go语言,设在图 13-2 左边一棵树中,a.b和c 分别为子树a.β和γ中的任意结点.当结点 x 左旋之后,a.b和c 的深度会如何变化? 文心一言: 在二叉树中,左旋操作是改变节点的子节点顺 ...
- 通过 KernelUtil 截取 QQ / TIM 客户端 ClientKey 详细教程
前言 众所周知,由于最新版本 QQ 9.7.20 已经不能通过模拟网页快捷登录来截取 Clientkey,估计是针对访问的程序做了限制,然而经过多方面测试,诸多的地区.环境.机器也针对这种获取方法做了 ...
- 【scikit-learn基础】--『监督学习』之 支持向量机分类
支持向量机也是一种既可以处理分类问题,也可以处理回归问题的算法.关于支持向量机在回归问题上的应用,请参考:TODO 支持向量机分类广泛应用于图像识别.文本分类.生物信息学(例如基因分类).手写数字识别 ...
- 带你认识数仓的监控系统TopSQL
本文分享自华为云社区<GaussDB(DWS)TopSQL总结>,作者:nullptr_ . TopSQL 背景 TopSQL为DWS的监控系统,记录DWS中各个作业.算子级别的资源使用数 ...