dbscan算法python实现_Python实现DBScan

article/2025/8/24 14:10:46

Python实现DBScan

运行环境

Pyhton3

numpy(科学计算包)

matplotlib(画图所需,不画图可不必)

计算过程

st=>start: 开始

e=>end: 结束

op1=>operation: 读入数据

cond=>condition: 是否还有未分类数据

op2=>operation: 找一未分类点扩散

op3=>operation: 输出结果

st->op1->op2->cond

cond(yes)->op2

cond(no)->op3->e

输入样例

/* 788points.txt */

15.55,28.65

14.9,27.55

14.45,28.35

14.15,28.8

13.75,28.05

13.35,28.45

13,29.15

13.45,27.5

13.6,26.5

12.8,27.35

12.4,27.85

12.3,28.4

12.2,28.65

13.4,25.1

12.95,25.95

788points.txt完整文件:下载

代码实现

# -*- coding: utf-8 -*-

__author__ = 'Wsine'

import numpy as np

import matplotlib.pyplot as plt

import math

import time

UNCLASSIFIED = False

NOISE = 0

def loadDataSet(fileName, splitChar='\t'):

"""

输入:文件名

输出:数据集

描述:从文件读入数据集

"""

dataSet = []

with open(fileName) as fr:

for line in fr.readlines():

curline = line.strip().split(splitChar)

fltline = list(map(float, curline))

dataSet.append(fltline)

return dataSet

def dist(a, b):

"""

输入:向量A, 向量B

输出:两个向量的欧式距离

"""

return math.sqrt(np.power(a - b, 2).sum())

def eps_neighbor(a, b, eps):

"""

输入:向量A, 向量B

输出:是否在eps范围内

"""

return dist(a, b) < eps

def region_query(data, pointId, eps):

"""

输入:数据集, 查询点id, 半径大小

输出:在eps范围内的点的id

"""

nPoints = data.shape[1]

seeds = []

for i in range(nPoints):

if eps_neighbor(data[:, pointId], data[:, i], eps):

seeds.append(i)

return seeds

def expand_cluster(data, clusterResult, pointId, clusterId, eps, minPts):

"""

输入:数据集, 分类结果, 待分类点id, 簇id, 半径大小, 最小点个数

输出:能否成功分类

"""

seeds = region_query(data, pointId, eps)

if len(seeds) < minPts: # 不满足minPts条件的为噪声点

clusterResult[pointId] = NOISE

return False

else:

clusterResult[pointId] = clusterId # 划分到该簇

for seedId in seeds:

clusterResult[seedId] = clusterId

while len(seeds) > 0: # 持续扩张

currentPoint = seeds[0]

queryResults = region_query(data, currentPoint, eps)

if len(queryResults) >= minPts:

for i in range(len(queryResults)):

resultPoint = queryResults[i]

if clusterResult[resultPoint] == UNCLASSIFIED:

seeds.append(resultPoint)

clusterResult[resultPoint] = clusterId

elif clusterResult[resultPoint] == NOISE:

clusterResult[resultPoint] = clusterId

seeds = seeds[1:]

return True

def dbscan(data, eps, minPts):

"""

输入:数据集, 半径大小, 最小点个数

输出:分类簇id

"""

clusterId = 1

nPoints = data.shape[1]

clusterResult = [UNCLASSIFIED] * nPoints

for pointId in range(nPoints):

point = data[:, pointId]

if clusterResult[pointId] == UNCLASSIFIED:

if expand_cluster(data, clusterResult, pointId, clusterId, eps, minPts):

clusterId = clusterId + 1

return clusterResult, clusterId - 1

def plotFeature(data, clusters, clusterNum):

nPoints = data.shape[1]

matClusters = np.mat(clusters).transpose()

fig = plt.figure()

scatterColors = ['black', 'blue', 'green', 'yellow', 'red', 'purple', 'orange', 'brown']

ax = fig.add_subplot(111)

for i in range(clusterNum + 1):

colorSytle = scatterColors[i % len(scatterColors)]

subCluster = data[:, np.nonzero(matClusters[:, 0].A == i)]

ax.scatter(subCluster[0, :].flatten().A[0], subCluster[1, :].flatten().A[0], c=colorSytle, s=50)

def main():

dataSet = loadDataSet('788points.txt', splitChar=',')

dataSet = np.mat(dataSet).transpose()

# print(dataSet)

clusters, clusterNum = dbscan(dataSet, 2, 15)

print("cluster Numbers = ", clusterNum)

# print(clusters)

plotFeature(dataSet, clusters, clusterNum)

if __name__ == '__main__':

start = time.clock()

main()

end = time.clock()

print('finish all in %s' % str(end - start))

plt.show()

输出样例

cluster Numbers = 7

finish all in 32.712135628590794

60254e2c5f1a2dbc5b928979c375ecb9.png

Python机器学习——DBSCAN聚类

密度聚类(Density-based Clustering)假设聚类结构能够通过样本分布的紧密程度来确定.DBSCAN是常用的密度聚类算法,它通过一组邻域参数(ϵϵ,MinPtsMinPts)来描述样 ...

Python实现DBSCAN聚类算法(简单样例测试)

发现高密度的核心样品并从中膨胀团簇. Python代码如下: # -*- coding: utf-8 -*- """ Demo of DBSCAN clustering ...

密度聚类 - DBSCAN算法

参考资料:python机器学习库sklearn——DBSCAN密度聚类,     Python实现DBScan import numpy as np from sklearn.cluster impo ...

(数据科学学习手札15)DBSCAN密度聚类法原理简介&amp&semi;Python与R的实现

DBSCAN算法是一种很典型的密度聚类法,它与K-means等只能对凸样本集进行聚类的算法不同,它也可以处理非凸集. 关于DBSCAN算法的原理,笔者觉得下面这篇写的甚是清楚练达,推荐大家阅读: ht ...

Python机器学习笔记:K-Means算法,DBSCAN算法

K-Means算法 K-Means 算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means 算法有大量的变体,本文就从最传统的K-Means算法学起,在其基础上学习 ...

DBSCAN——python实现

# -*- coding: utf-8 -*- from matplotlib.pyplot import * from collections import defaultdict import r ...

挑子学习笔记:DBSCAN算法的python实现

转载请标明出处:https://www.cnblogs.com/tiaozistudy/p/dbscan_algorithm.html DBSCAN(Density-Based Spatial Clu ...

&lbrack;MCM&rsqb; K-mean聚类与DBSCAN聚类 Python

import matplotlib.pyplot as plt X=[56.70466067,56.70466067,56.70466067,56.70466067,56.70466067,58.03 ...

吴裕雄 python 机器学习——密度聚类DBSCAN模型

import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...

随机推荐

&lbrack;转&rsqb;在Ubuntu 14&period;04安装和使用Docker

在Ubuntu 14.04安装和使用Docker 作者:chszs,版权所有,未经同意,不得转载.博主主页:http://blog.csdn.net/chszs Docker是一个开源软件,它可以把一 ...

关于ASP&period;NET或VS2005 搭建三层架构的理解

最近想学习ASP.NET建网站,关于ASP.NET或VS2005 搭建三层架构的理解,网上摘录了一些资料,对于第(2)点的讲解让我理解印象深刻,如下: (1)为何使用N层架构? 因为每一层都可以在仅仅 ...

apache 配置https

1.生成密钥# openssl genrsa 1024 > server.key这是用128位rsa算法生成密钥,并保存到server.key文件 2.生成证书请求文件# openssl req ...

(理论篇)53个要点提高PHP编程效率

用单引号代替双引号来包含字符串,这样做会更快一些.因为php会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的"函数"( ...

Sikuli简介

Sikuli是利用屏幕上能够看到的图型做自动化,能够通过这个手段来识别和控制元素,非常适合和Selenium和Robot Framework一起结合起来做自动化. 1.Sikuli主页 http:// ...

JAVA中,JSON MAP LIST的相互转换

1 JSON包含对象和数组,对应于JAVA中的JSONObject,JSONArray 2 String 转JSON对象 JSONObject.fromObject("String&quot ...

protobuf NET使用

首先,开源项目地址为: protobuf NET的GITHUB地址 下载下来后,打开项目,找到目录:Core/protobuf-net,生成一下,然后就可以在bin里得到protobuf-net.dl ...

MySQL InnoDB 存储引擎探秘

在MySQL中InnoDB属于存储引擎层,并以插件的形式集成在数据库中.从MySQL5.5.8开始,InnoDB成为其默认的存储引擎.InnoDB存储引擎支持事务.其设计目标主要是面向OLTP的应用, ...

SharePoint如何配置Ipad跳转等问题

如何配置Ipad跳转 Apple iPad 设备上不支持 SharePoint 标准视图.用户可以改用移动视图在 iPad 设备上查看 SharePoint 内容.默认情况下,iPad 用户被重定向到 ...

asp&period;net core 依赖注入实现全过程粗略剖析(1)

转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/ 常用扩展方法 注入依赖服务: new ServiceCollection().AddSingle ...


http://chatgpt.dhexx.cn/article/3Ru4DTIY.shtml

相关文章

DBSCAN 算法

DBSCAN 算法 DBSCAN的由来 DBSCAN它将簇定义为密度相连的点组成的最大集合&#xff0c;能够把具有足够高密度的区域划分为簇&#xff0c;并可在噪声的空间数据库中发现任意形状的聚类 在k-means中 , 每个点有且只有一个簇 , 且必须属于一个簇 , 但是在DBSCAN中 , 点最多属于…

DBSCAN算法

本文简单介绍DBSCAN算法的原理及实现。 DBSCAN算法原理 基本概念 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff09;是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇&#xff0c;并在具有噪声的空间数据库中发…

DBSCAN点云聚类

1、DBSCAN算法原理 DBSCAN是一种基于密度的聚类方法&#xff0c;其将点分为核心点与非核心点&#xff0c;后续采用类似区域增长方式进行处理。下图为DBSCAN聚类结果&#xff0c;可见其可以对任意类别的数据进行聚类&#xff0c;无需定义类别数量。 DBSCAN聚类说明 DBSCAN聚类过…

DBSCAN

DBSCAN 算法将具有足够高密度的区域划分为簇&#xff0c;并可 以发现任何形状的聚类 DBSCAN算法概念 &#x1d6c6;邻域&#xff1a;给定对象半径&#x1d700;内的区域称为该对象的&#x1d700;邻域。核心对象&#xff1a;如果给定 &#x1d700; 邻域内的样本点数大于等于M…

密度聚类之DBSCAN算法原理

DBSCAN(Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法&#xff0c;和K-Means&#xff0c;BIRCH这些一般只适用于凸样本集的聚类相比&#xff0c;DBSCAN既可以适用于凸样本集&#xff0c;也…

总结:机器学习之DBSCAN

一、基本思想 DBSCAN是一种基于密度的聚类算法&#xff0c;这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本&#xff0c;他们之间的紧密相连的&#xff0c;也就是说&#xff0c;在该类别任意样本周围不远处一定有同类别的样本存在。 通过将紧密…

聚类算法也可以异常检测?DBSCAN算法详解。

一、算法概述 DBSCAN是一个出现得比较早&#xff08;1996年&#xff09;&#xff0c;比较有代表性的基于密度的聚类算法&#xff0c;虽然这个算法本身是密度聚类算法&#xff0c;但同样可以用作异常检测&#xff0c;其思想就是找到样本空间中处在低密度的异常样本&#xff0c;本…

DBSCAN详解

一、基本概念 DBSCAN的基本概念可以用1&#xff0c;2&#xff0c;3&#xff0c;4来总结。 1个核心思想&#xff1a;基于密度 直观效果上看&#xff0c;DBSCAN算法可以找到样本点的全部密集区域&#xff0c;并把这些密集区域当做一个一个的聚类簇。 2个算法参数&#xff1a;邻…

【机器学习】DBSCAN聚类算法

DBSCAN聚类算法 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的聚类方法&#xff09;是一种基于密度的空间聚类算法。 1.基本概念 核心对象:若某个点的密度达到算法设定的阈值则其为核心点。(即r的 ϵ \e…

30款APP源码打包 Java Android安卓App源码 30款打包下载

[30款APP源码打包 Java Android安卓App源码 30款打包下载](访问密码: 168168)(https://474b.com/file/29013429-461457489)

【Android】Android源码下载

学而不思则罔&#xff0c;思而不学则殆 【Android】Android源码下载 一.环境准备虚拟机Ubuntu系统 二.Android源码下载Ubuntu下载1.repo下载2.修改源代码镜像地址3.初始化仓库4.指定版本5.同步源码树 Windows下载1.repo下载2.修改源代码镜像地址3.初始化仓库4.指定版本5.同步源…

下载Android源码流程(完整版)

要在Linux环境下操作&#xff0c;要在Linux环境下操作&#xff0c;要在Linux环境下操作~~ 不要想在Windows环境下操作&#xff0c;因为会有各种问题。Windows环境的童鞋又不想装双系统的可以跟着下面的操作&#xff0c;Linux的童鞋可以直接跳过看。Mac的童鞋就略过~~~ &#x…

Android系统源码下载

1&#xff0c;ubuntu电脑 2&#xff0c;下载 repo 工具: mkdir ~/bin PATH~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod ax ~/bin/repo3&#xff0c; 建立工作目录: mkdir WORKING_DIRECTORY cd WORKING_DIRECTORY4&am…

Android系统源码_下载编译——从下载系统源码到编译系统镜像

前言 近期因工作原因&#xff0c;需要频繁编译、调试Android源码 &#xff0c;特别是修改framework层的源码&#xff0c;经过不懈努力&#xff0c;终于可以正常调试了。 这里进行一些总结和分享。 参考文章&#xff1a;清华镜像之Android 镜像使用帮助、Android系统源码编译 …

下载并编译Android源码

下载编译源码 系统架构&#xff1a; Linux&#xff1a;Linux内核和驱动模块&#xff08;USB Camera 蓝牙等&#xff09; Libraries&#xff1a;提供动态库&#xff0c;Android运行时库、Dalvik虚拟机等&#xff0c;大部分是C 和C写的&#xff0c;可以看成是native层 Framewo…

一、安卓系统源码下载

前言&#xff1a;为了研究安卓系统&#xff0c;我们需要下载安卓源码&#xff0c;本篇博文参考安卓官网https://source.android.com &#xff0c;对安卓系统各个版本源码的下载做出了详细解释。 一、环境要求概览 在下载编译安卓系统源码前&#xff0c;我们必须对各个版本安卓…

从github下载最新Android源码

今年5月底开始&#xff0c;谷歌彻底被墙&#xff0c;所有谷歌的网站都不能访问了&#xff0c;这次包括了android.org&#xff0c;googlesource.com&#xff0c;code.google.com。Android官方的资源不能访问&#xff0c;想下载Android代码当然是困难重重了。 本文就为大家解决这…

Android源码下载编译(TI)

0 前言 通过《Android源码下载 & 编译&#xff08;高通&#xff09;》的方法下载的源码是包含有kernel目录的&#xff08;也就是包含Linux内核&#xff09;&#xff0c;然而&#xff0c;通过其它方法下载的源码可能并不包含kernel目录&#xff08;也就是不包含Linux内核&am…

安卓系统源码、内核下载

一、下载源码 以下载源码2.3.7版本为例 环境ubuntu14.04 1、安装git sudo apt-get install git git --version //查看版本 git config --global user.name "zhangsan" //设置用户名 git config --global user.email "zhangsan163.com" //设置邮箱 git…

AOSP安卓源码下载

Android源码下载 在国内想下载Android要么科学上网&#xff0c;要么使用国内搭建的镜像&#xff0c;有清华镜像&#xff0c;中科大的镜像网站。这里使用清华镜像网站镜像Android源码的下载清华镜像网站地址&#xff0c;为啥我要写这篇笔记嘞&#xff0c;虽然网上有很多这方便的…