DBSCAN算法原理及其Python实现

文章目录

    • 原理
    • Python实现
    • 验证

原理

DBSCAN,即Density-Based Spatial Clustering of Applications with Noise,基于密度的噪声应用空间聚类。

在DBSCAN算法中,将数据点分为三类:

  1. 核心点:若样本 x i x_i xi ε \varepsilon ε邻域内至少包含了 M M M个点,则为核心点
  2. 边界点:若样本 x i x_i xi ε \varepsilon ε邻域内包含的点数小于 M M M,但在其他核心点的 ε \varepsilon ε邻域内,则为边界点
  3. 噪声:既非核心点也非边界点则为噪声

那么,在实际实现DBSCAN算法时,对这三种点理应采取不同的操作

  1. 若一个点是核心点,那么应该穷尽所有与其相连接的边界点,再得到与边界点相连接的所有点,知道遍历完整个点集。
  2. 若一个点是边界点,若这个点尚未归类;若已经归类,则如1中所说,继续搜索与其相连的点。
  3. 若为噪声,则直接跳过。

可见,DBSCAN算法需要两个参数,分别是邻域半径 ε \varepsilon ε和点数 M M M

Python实现

为了衡量两点之间的距离,计算一个距离矩阵以备调用,可以降低计算次数。对于一组点集data,其欧氏距离矩阵的求解方法如下

# 距离矩阵
def disMat(data):
    arr = np.array(data)
    dMat = lambda arr : arr.reshape(1,-1) - arr.reshape(-1,1)
    # 此为单个轴的距离矩阵
    mats = [dMat(arr[:,i]) for i in range(arr.shape[1])]
    return np.linalg.norm(mats, axis=0)

其中,dMat用于求解一维向量的距离矩阵。

下面则是基于距离矩阵的DBSCAN算法。

import numpy as np

class DBSCAN(object):
    # e 最小距离, minPts 最少样本数量
    def __init__(self, e, minPts):
        self.e = e
        self.minPts = minPts

    # 获取点id的临近点
    def nearby(self, id):
        return np.where(self.mat[id] <= self.e)[0]

    def searchNearbyPts(self, points, group):
        for id in points:
            if id not in self.data:
                continue

            group.append(id)
            self.data.remove(id)

            # 查看id点的临近点
            nearbyPts = self.nearby(id)
            if len(nearbyPts) >= self.minPts:
                self.searchNearbyPts(nearbyPts, group)

    def fit(self, mat):
        self.mat = mat
        groups = list()

        keys = range(mat.shape[0])
        self.data = list(keys)

        for id in keys:
            if id not in self.data:
                continue

            # id点的临近点
            nearbyPts = self.nearby(id)
            if len(nearbyPts) < self.minPts:
                continue

            group = [id]
            self.data.remove(id)
            self.searchNearbyPts(nearbyPts, group)
            groups.append(group)

        # 加入飞点
        groups += self.data
        return groups

在上面的DBSCAN类中,fit相当于执行聚类的开关,其输入参数mat是点集的距离矩阵。

self.data是点的序号的列表。其中的for循环是DBSCAN算法的核心部分,其基本逻辑是,如果一个点已经被归类了,那么就从self.data中删除;如果这个点恰好又是核心点,那么就要搜寻其所有的邻近点。

函数nearby用于查找序号为id的点的所有临近点,searchNearbyPts则将某点的所有临近点进行归类。

验证

其数据生成、绘图代码如下所示

# 初始化数据
def initData(num, min, max):
    return [np.random.randint(min, max, size=2) for _ in range(num)]

def drawRes(data, groups):
    for gp in groups:
        xy = np.array([data[i] for i in gp])
        plt.scatter(xy[:,0], xy[:,1])
    plt.title(u'DBSCAN')
    plt.grid()
    plt.tight_layout()
    plt.show()

if __name__ == '__main__':
    np.random.seed(42)
    ds1 = initData(20, 0, 30)
    ds2 = initData(20, 40, 60)
    ds3 = initData(20, 70, 100)
    ds = ds1 + ds2 + ds3

    score_mat = disMat(ds)

    groups = DBSCAN(20, 3).fit(score_mat)
    drawRes(ds, groups)

聚类结果为

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《深入理解计算机系统》学习笔记 - 第三课 - 浮点数

Floating Point 浮点数 文章目录 Floating Point 浮点数分数二进制示例能代表的数浮点数的表示方式浮点数编码规格化值规格化值编码示例 非规格化的值特殊值 示例IEEE 编码的一些特殊属性四舍五入&#xff0c;相加&#xff0c;相乘四舍五入四舍五入的模式二进制数的四舍五入 浮…

Linux 网络协议

1 网络基础 1.1 网络概念 网络是一组计算机或者网络设备通过有形的线缆或者无形的媒介如无线&#xff0c;连接起来&#xff0c;按照一定的规则&#xff0c;进行通讯的集合( 缺一不可 )。 5G的来临以及IPv6的不断普及&#xff0c;能够进行联网的设备将会是越来越多&#xff08…

扩展学习|商务智能与社会计算

一、概念介绍 &#xff08;一&#xff09;商务智能 商务智能&#xff08;Business Intelligence&#xff0c;简称BI&#xff09;是一种基于数据分析的决策支持系统&#xff0c;旨在帮助企业或组织更好地理解和利用自身数据&#xff0c;发现其中的模式和趋势&#xff0c;并提供…

Java物联网项目源码

Java物联网项目源码 使用技术&#xff1a;JAVA [ springmvc / spring / mybatis ] 、Mysql 、Html 、Jquery 、css 协议和优势&#xff1a;TCP/IP、HTTP、MQTT 通讯协议。 系统包括&#xff1a;后台服务&#xff0c;传感器解析服务、web展示&#xff1b; 目前web系统支持功…

【Proteus仿真】【STM32单片机】蓝牙遥控小车

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使LCD1602液晶&#xff0c;L298电机&#xff0c;直流电机&#xff0c;HC05/06蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显…

基于springboot实现的仿天猫商城项目

一、系统架构 前端&#xff1a;jsp | js | css | jquery 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.7 | mysql | maven 二、代码及数据库 三、功能介绍 01. web端-首页 02. web端-商品查询 03. web端-商品详情 04. web端-购物车 05. web端-订单…

YOLOv8改进 | 2023 | DiverseBranchBlock多元分支模块(有效涨点)

一、本文介绍 本文带来的改进机制是YOLOv8模型与多元分支模块&#xff08;Diverse Branch Block&#xff09;的结合&#xff0c;Diverse Branch Block (DBB) 是一种用于增强卷积神经网络性能的结构重新参数化技术。这种技术的核心在于结合多样化的分支&#xff0c;这些分支具有…

C++ day57 回文子串 最长回文子串序列

题目1&#xff1a;647 回文子串 题目链接&#xff1a;回文子串 对题目的理解 返回字符串s中回文子串的个数&#xff0c;字符串s至少包含一个字符&#xff0c;且仅由小写字母组成。 动态规划 动规五部曲 1&#xff09;dp数组及下标i的含义 dp[i][j]&#xff1a;[i,j]子串…

22款奔驰S450L升级主动式环境氛围灯 安全提醒功能

主动式氛围灯有263个可多色渐变的LED光源&#xff0c;营造出全情沉浸的动态光影氛围。结合智能驾驶辅助系统&#xff0c;可在转向或检测到危险时&#xff0c;予以红色环境光提示&#xff0c;令光影艺术彰显智能魅力。配件有6个氛围灯&#xff0c;1个电脑模块。星骏汇小许Xjh158…

第二十一章——网络通信总结

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmission…

第21章网络通信

Internet 提供了大量有用的信息&#xff0c;很少有人能在接触过Internet后拒绝它的诱惑。计算机网络实现了多台计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#xff0c…

Python编程技巧 – 异常处理

Python编程技巧 – 异常处理 Python Programming Skills – Exception Handling By JacksonML 每一个程序都未必是健壮的&#xff0c;有时候很脆弱。只有在人的理想思维状况下&#xff0c;返回的结果才是正确的&#xff0c;如意的。 1. 错误发生及异常输出 面对种种编写有疏…

【mysql】下一行减去上一行数据、自增序列场景应用

背景 想获取if_yc为1连续账期数据 思路 获取所有if_yc为1的账期数据下一行减去上一行账期&#xff0c;如果为1则为连续&#xff0c;不等于1就为断档获取不等于1的最小账期&#xff0c;就是离当前账期最近连续账期 代码 以下为mysql语法&#xff1a; select acct_month f…

机场信息集成系统系列介绍(1)

机场信息集成系统是一种专为机场运营管理设计的先进系统&#xff0c;旨在提高机场的航班调度指挥效率&#xff0c;同时为机场各生产部门提供航班保障计划的制定和实时调整功能。 该系统的核心用户是机场运控部门&#xff0c;他们利用系统进行航班运行指挥&#xff0c;通过采集航…

Kafka性能调优:高吞吐、低延迟的数据流

Apache Kafka作为一种高性能、分布式流处理平台&#xff0c;对于实时数据的处理至关重要。本文将深入讨论Kafka性能调优的关键策略和技术&#xff0c;通过丰富的示例代码为大家提供实际操作指南&#xff0c;以构建高吞吐、低延迟的数据流系统。 Broker 配置的优化 首先&#…

中断、异常和系统调用(2-1,2-2,2-3)

2-1 课堂练习2.1&#xff1a;外部中断 本实训分析 Linux 0.11 对外部中断的响应和处理过程。在每条指令执行的末尾&#xff0c;如果没有关中断&#xff0c;CPU 会检查是否收到了外部中断信号&#xff0c;如果有信号&#xff0c;则 CPU 就切换到核心态去执行对应的中断处理程序…

c# 字段和属性(get、set、init)

基本概念&#xff1a; “字段”就是类内成员变量&#xff0c;一般为了隐藏数据&#xff0c;保护数据&#xff0c;实现对外不可见&#xff0c;体现封装的思想&#xff0c;成员变量都声明为私有变量&#xff1b;“属性”是类内的一种成员&#xff0c;它是一种特殊的方法(方法的意…

文件被删除了怎么恢复?3个宝藏方法,快来get!

“我是一个学生党&#xff0c;期末的一些资料保存在电脑上&#xff0c;但是不知道是不是被我误删了&#xff0c;导致很多文件都找不到了。文件被删除了怎么恢复呢&#xff1f;大家帮我出出主意吧&#xff01;” 对于经常在电脑上保存各种文件的用户来说&#xff0c;文件误删除是…

万宾科技荣获2023物联网场景应用品牌企业创始人发表专题演讲

12月5日-6日由雄安新区管理委员会、中关村发展集团股份、物联中国团体组织联席会主办&#xff0c;全国33家物联网协会协办的2023物联网产业品牌大会于在雄安新区顺利召开。本次大会以“物联中国.数智雄安”为主题&#xff0c;邀请到科技部原副部长吴忠泽&#xff0c;雄安新区管…

MIT线性代数笔记-第25讲-复习二

目录 25.复习二打赏 25.复习二 已知 a ⃗ [ 2 1 2 ] \vec{a} \begin{bmatrix} 2 \\ 1 \\ 2 \end{bmatrix} a ​212​ ​&#xff0c;求&#xff1a; (1) a ⃗ \vec{a} a 的投影矩阵 (2) a ⃗ \vec{a} a 的投影矩阵的特征值和特征向量 A n s Ans Ans&#xff1a;(1) P a ⃗…
最新文章