热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DBScan聚类,打破形状的限制,使用密度聚类

如何用花盆摆放成国庆字,并且包围这两个字。   在DBSCAN中衡量密度主要使用的指标:半径、最少样本量 算法原理*直接密度可达如果一个点在核心对象的半径区域

如何用花盆摆放成国庆字,并且包围这两个字。

 

 

 

在DBSCAN中衡量密度主要使用的指标:半径、最少样本量

 


算法原理

*直接密度可达

  如果一个点在核心对象的半径区域内,那么这个点和核心对象称为直接密度可达,比如A和B,B和C等

  

 

     图1

 

 

 *密度可达

  如果有一系列点,都满足上一个点到这个点都是密度直达,那么这个系列中不相邻的点就称为密度可达,比如上图1中A和D。另外下图2也是有解释的

 

 

 

                  图2

 

*密度相连

  如果通过一个核心对象出发,得到两个密度可达的点,那么这两个点称为密度相连,比如图1中E和F

 

经过初始化后,从整个样本集中去抽取样本点

  如果这个样本点是核心对象,那么从这个点出发,找到所有密度可达的对象,构成一个簇

  如果这个样本点不是核心对象,那么再重新找下一个点

 


算法优点

不需要划分个数(只需要计算)

可以处理噪点

可以处理任何形状的空间聚类问题

 


算法缺点

需要指定最小样本量和半径两个参数

数量大时开销也很大

如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量比较差

from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import dbscan
#生成500个点,噪声为0.1
X,_=datasets.make_moons(500,noise=0.1,random_state=1)
df=pd.DataFrame(X,columns=['x','y'])
df.plot.scatter('x','y',s=200,alpha=0.5,c="green",title='dataset by DBSCAN')
plt.show()

  

 

 生成的绿色结果

 

#eps为邻域半径,min_samples为最少样本量
core_samples,cluster_ids=dbscan(X,eps=0.2,min_samples=20)
#cluster_ids中-1表示对应的点为噪声
df=pd.DtaFrame(np.c_[X,cluster_ids],columns=['x','y','cluster_id'])
df[
'cluster_id']=df['cluster_id'].astype('i2')
#绘制结果图像
df.plot.scatter('x','y',s=200,
c
=list(df['scatter_id']),cmap='Reds',colorbar=False,
alpha
=0.6,title='DBSCAN cluster result')
plt.show()

 

 



推荐阅读
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
author-avatar
小程序员
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有