python机器人算法_DBscan算法及其Python实现

DBSCAN简介:

1.简介

DBSCAN 算法是一种基于密度的空间聚类算法。该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其它空间对象)的数目不小于某一给定阀值。DBSCAN 算法的显著优点是聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类。但是由于它直接对整个数据库进行操作且进行聚类时使用了一个全局性的表征密度的参数,因此也具有两个比较明显的弱点:

1. 当数据量增大时,要求较大的内存支持 I/0 消耗也很大;

2. 当空间聚类的密度不均匀、聚类间距离相差很大时,聚类质量较差。

2.DBSCAN算法的聚类过程

DBSCAN算法基于一个事实:一个聚类可以由其中的任何核心对象唯一确定。等价可以表述为: 任一满足核心对象条件的数据对象p,数据库D中所有从p密度可达的数据对象所组成的集合构成了一个完整的聚类C,且p属于C。

3.DBSCAN中的几个定义

密度可达是直接密度可达的传递闭包,非对称性关系;密度相连是对称性关系。DBSCA目的是找到密度相连对象的最大集合。

E领域:给定对象p半径为E内的区域称为该对象的E领域;

核心对象:p的E领域内样本数大于MinPts(算法输入值),则该对象p为核心对象;

直接密度可达:对于样本集合D,如果样本点q在p的E领域内,且p为核心对象,则p直接密度可达q;

密度可达:对于样本集合D,存在一串样本点p1,p2,p3,...pn,其中连续两个点直接密度可达,则 p=p1,q=qn,则p密度可达q;

密度相连:对于样本集合D中任意一点o,存在p到o密度可达,并且q到o密度可达,那么q从p密度相连;

from matplotlib.pyplot import *

from collections importdefaultdictimportrandom#function to calculate distance

defdist(p1, p2):return ((p1[0]-p2[0])**2+ (p1[1]-p2[1])**2)**(0.5)#randomly generate around 100 cartesian coordinates

all_points=[]for i in range(100):

randCoord= [random.randint(1,50), random.randint(1,50)]if not randCoord inall_points:

all_points.append(randCoord)#take radius = 8 and min. points = 8

E = 8minPts= 8

#find out the core points

other_points =[]

core_points=[]

plotted_points=[]for point inall_points:

point.append(0)#assign initial level 0

total =0for otherPoint inall_points:

distance=dist(otherPoint,point)if distance<=E:

total+=1

if total >minPts:

core_points.append(point)

plotted_points.append(point)else:

other_points.append(point)#find border points

border_points=[]for core incore_points:for other inother_points:if dist(core,other)<=E:

border_points.append(other)

plotted_points.append(other)#implement the algorithm

cluster_label=0for point incore_points:if point[2]==0:

cluster_label+=1point[2]=cluster_labelfor point2 inplotted_points:

distance=dist(point2,point)if point2[2] ==0 and distance<=E:printpoint, point2

point2[2] =point[2]#after the points are asssigned correnponding labels, we group them

cluster_list = defaultdict(lambda: [[],[]])for point inplotted_points:

cluster_list[point[2]][0].append(point[0])

cluster_list[point[2]][1].append(point[1])

markers= ['+','*','.','d','^','v','>','

i=0printcluster_listfor value incluster_list:

cluster=cluster_list[value]

plot(cluster[0], cluster[1],markers[i])

i= i%10+1

#plot the noise points as well

noise_points=[]for point inall_points:if not point in core_points and not point inborder_points:

noise_points.append(point)

noisex=[]

noisey=[]for point innoise_points:

noisex.append(point[0])

noisey.append(point[1])

plot(noisex, noisey,"x")

title(str(len(cluster_list))+"clusters created with E ="+str(E)+"Min Points="+str(minPts)+"total points="+str(len(all_points))+"noise Points ="+str(len(noise_points)))

axis((0,60,0,60))

show()

参考地址:http://www.cnblogs.com/sungyouyu/p/3636708.html#undefined

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

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

相关文章

c语言e怎么表示_来测测!这11个C语言入门基础知识你都掌握了吗?

文章字数&#xff1a;8400 干货指数&#xff1a;⭐⭐⭐⭐⭐C语言程序的结构认识用一个简单的c程序例子&#xff0c;介绍c语言的基本构成、格式、以及良好的书写风格&#xff0c;使小伙伴对c语言有个初步认识。例1&#xff1a;计算两个整数之和的c程序&#xff1a;#include main…

泰拉瑞亚服务器怎么让玩家注册,泰拉瑞亚服务器权限指令大全

; z1 o, G5 B N; k# W% L5 E) a7 _9 k. x% z* A/ \# j) U! Y2 8 Wtshock.ignore.sendtilesquare7 p3 x/ : T- {; y4 y" k7 U8 J描述: 允许客户端无限制修改地图. # I( K8 {# K$ n( 4 d命令: 无 9 g3 L. p5 G9 M; Y( E4 w. Y v5 M$ H, \/ K; M% n3 ktshock.ignore.dropb…

Oracle甲骨文8.7亿美元高价收购Eloqua

北京&#xff0c;2012年12月20日—— 甲骨文今天宣布&#xff0c;已与领先的云营销自动化和收入绩效管理软件供应商Eloqua公司&#xff08;NASDAQ代码&#xff1a;ELOQ&#xff09;达成收购协议&#xff0c;收购价为每股23.50美元&#xff0c;总额约为8.71亿美元。Eloqua的现…

Linux开启mysql远程连接的设置步骤

Mysql默认root用户只能本地访问&#xff0c;不能远程连接管理mysql数据库&#xff0c;Linux如何开启mysql远程连接&#xff1f;设置步骤如下&#xff1a; 1、GRANT命令创建远程连接mysql授权用户itlogger mysql -u root -p mysql>GRANT ALL PRIVILEGES ON *.* TO itloggerlo…

3dsmax展uv_TexTools|3dmax展UV插件(TexTools for 3ds Max)下载v4.10免费版 - 欧普软件下载

TexTools for 3ds Max是为3dmax推出的一款展UV插件&#xff0c;主要功能包括自动加入环形边结构、材质加速烘焙、光影追踪渲染预设、多种模型对象棋盘格贴图等&#xff0c;支持3dsmax或以上版本&#xff0c;在editUVW模式下可以展开UVW修改&#xff0c;编辑UVW编辑器和编辑按钮…

新浪云python示例_Python Web框架Flask中使用新浪SAE云存储实例

对于部署在新浪应用引擎SAE上的项目&#xff0c;使用新浪SAE云存储是不错的存储方案。 新浪SAE云存储仅能在SAE环境中正常使用&#xff0c;对它进行简单封装后&#xff0c;可以直接在Flask中使用&#xff0c;项目代码见GitHub上Flask-SaeStorage。 使用示例代码&#xff1a; fr…

hp服务器如何ghost系统,惠普(HP)电脑安装不了GHOST系统的解决办法

你还在为不知道惠普(HP)电脑安装不了GHOST系统的解决办法而不知所措么?下面来是学习啦小编为大家收集的惠普(HP)电脑安装不了GHOST系统的解决办法&#xff0c;欢迎大家阅读&#xff1a;惠普(HP)电脑安装不了GHOST系统的解决办法1、按F10进入CMOS2、找到电源设置项(Power Manag…

azm335x 串口配置

任务: 配置uart3和uart5 UART3 UART5 配置uart3 1. 修改mmu33xx.c _AM33XX_MUXENTRY(MII1_RXD3, 0, "mii1_rxd3", NULL, "rgmii1_rd3", "mmc0_dat5", "mmc1_dat2", NULL, "mcasp0_axr0", "gpio2_…

木兰编程语言python_ulang(木兰编程语言)

ulang(木兰编程语言)是款最近新推出的语言编程的软件&#xff0c;页面非常的简单&#xff0c;下载下来直接编辑就可以了&#xff0c;永久免费的&#xff0c;不会有任何的弹出窗口打扰。ulang(木兰编程语言)软件特色Python是一种跨平台的计算机程序设计语言。是一种面向对象的动…

python3.7下载教程视频_视频 | 我选择Python3.7来学习!顺便把教程分享给大家

原标题&#xff1a;视频 | 我选择Python3.7来学习&#xff01;顺便把教程分享给大家 〖文章正文〗 Python 3.7增添了众多新的类&#xff0c;可用于数据处理、针对脚本编译和垃圾收集的优化以及更快的异步I/O。 Python这种语言旨在使复杂任务变得简单&#xff0c;最新版本Python…

全志A20单独烧录内核

全志A20平板&#xff0c;摸索了一下fastboot&#xff0c;但是烧录失败&#xff0c;提示找不到分区。于是就想到用TF卡烧录boot.img&#xff0c;因为只修改了内核&#xff0c;不想打包全部烧录一遍。 启动到uboot命令行&#xff0c;输入mmcinfo初始化mmc&#xff0c;不过提示&am…

JVM JRE JDK,这些东西到底是什么?(转载)

JVM JRE JDK&#xff0c;这些东西到底是什么? JVM JRE JDK&#xff0c;这些东西到底是什么?   我们在安装好JDK后就可以想象成我们已经买了一台安装好软件的新的电脑。 JVM : Java Virtual Machine(Java虚拟机) 。所谓“虚拟机”顾名思义就是模拟出来的东西。就像是我们在用…

投影仪显示播放服务器连接异常,「投影仪维修」常见投影机故障如何解决?

投影机维修方法有哪些一、接通电源后无任何反应投影机在接通电源后&#xff0c;没有任何反应&#xff0c;说明投影机的电源供电部分很可能发生了问题。首先&#xff0c;你应该先检查一下投影机的外接电源规格是否与投影机所要求的标准相同&#xff0c;比方说要是外接电源插座没…

rabbitmq 消费端代码获取队列名称_C#调用RabbitMQ实现消息队列的示例代码

前言我在刚接触使用中间件的时候&#xff0c;发现&#xff0c;中间件的使用并不是最难的&#xff0c;反而是中间件的下载&#xff0c;安装&#xff0c;配置才是最难的。所以&#xff0c;这篇文章我们从头开始学习RabbitMq&#xff0c;真正的从头开始。关于消息队列其实消息队列…

python画饼图程序_python使用matplotlib画饼状图

本文实例为大家分享了python使用matplotlib画饼状图的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 代码与详细注释 from matplotlib import pyplot as plt #调节图形大小&#xff0c;宽&#xff0c;高 plt.figure(figsize(6,9)) #定义饼状图的标签&#xff0c;标签…

我的世界服务器显示英文,我的世界pixelmon服务器技能显示英文

满意答案zihezimu2019.04.21采纳率&#xff1a;43% 等级&#xff1a;13已帮助&#xff1a;4603人解决神奇宝贝服务器在精灵对战中技能显示为英文&#xff0c;并且对战后名字显示为英文的问题心得 联机教程 1282 浏览1 评论殒天 Lv.7 猎手2017-2-18 09:49:51很多神奇宝贝服务…

AM335X 分配大于4M的framebuffer

最近正在将800X480的设备修改成1024X600&#xff0c;算了一下&#xff0c; 1024X600X4X2需要4M的framebuffer空间&#xff0c;其中4代表一个像素32位色的Byte数&#xff0c; 2代表双framebuffer&#xff0c;LCD驱动程序中&#xff0c;使用dma_alloc_coherent来分配缓冲区 dm…

万年历升级版 Calendar

package com.yc.wnl;import java.util.Calendar; import java.util.Date; import java.util.Scanner;import com.yc.ycutil.DateUtil; //用于输出用户要求的年月对应的表格 public class CalendarTest {public static void main(String[] args) {///万年历的进化版//1、这个月的…

bert pytorch 序列标注_序列标注:Bi-LSTM + CRF

最近在做序列标注的相关任务,为了理解bi-lstm + crf的原理及细节,找了很多相关资料,以及代码实现,这里分享给大家并附上一些自己的理解。 CRF 相关资料推荐 关于crf,我看了很多资料,这里推荐几个 - 英文的crf tutorial - 李航的统计学习方法 这两个讲的很细,公式很多,很…

python中if语句求最大值_python 判断三个数字中的最大值实例代码

python 判断三个数字中的最大值&#xff0c;具体代码如下所示&#xff1a; #判断三个数中最大值 n1 int(input(please enter the firest number:)) n2 int(input(please enter the second number:)) n3 int(input(please enter the third number:)) max_num 0 if n1 > n2…