首页 > 编程语言 >机器学习:DBSCAN算法(内有精彩动图)

机器学习:DBSCAN算法(内有精彩动图)

时间:2024-08-30 22:24:51浏览次数:7  
标签:DBSCAN 动图 labels db 算法 score samples data

目录

前言

一、DBSCAN算法

1.动图展示(图片转载自网络)

2.步骤详解

3.参数配置

二、代码实现

1.完整代码

2.代码详解

1.导入数据

2.通过循环确定参数最佳值

总结


前言

        DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法。它可以发现任意形状的簇并能够处理噪声数据。

 

一、DBSCAN算法

1.动图展示(图片转载自网络)

  • 如图所示是DBSCAN算法的实现过程
  • 这里使用参数是半径为1,最小样本量为4

 

2.步骤详解

  1. 初始化:从数据集中的每个点开始,初始化簇的构建。
  2. 核心点检测:判断每个点是否为核心点(即其邻域点的数量是否大于或等于 min_samples)。
  3. 簇扩展
    • 对于每个核心点,将其邻域内的所有点添加到簇中。
    • 递归扩展这些点的邻域,直到簇扩展完成。
  4. 标记噪声点:那些没有被包含在任何簇中的点被标记为噪声点。

如图所示:

  • 从A点开始,根据给定半径判断邻域内样本数是否符合给定最小样本量从而确定该点是不是核心
  • 再遍历该邻域内每个点,重复上述步骤
  • 直到某个点邻域内样本数小于给定最小样本量
  • 至此簇扩展完成
  • 此图 A B C 三点为一个簇内的点  N是离群点

 

3.参数配置

  1. eps: 定义了一个点的邻域的最大距离(即半径)。如果一个点的邻域内有至少 min_samples 个点,则这些点被认为是一个簇的一部分。

  2. min_samples: 形成一个簇所需的最小点数。如果一个点的邻域内的点数大于或等于 min_samples,则这些点被视为核心点,并且它们的邻域中的点将成为同一簇的一部分。

 

二、代码实现

1.完整代码

import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn import metrics

data = pd.read_csv('data.txt', sep=' ')
x = data.iloc[:, 1:5]
# from sklearn.preprocessing import StandardScaler
# std = StandardScaler()
# x = std.fit_transform(x)

"""
eps:半径
min_samples:最小密度
labels:分类结果   自动分类 -1为离群点
"""
scores = []
for i in range(2, 20):
    db = DBSCAN(eps=i, min_samples=2).fit(x)
    labels = db.labels_
    score = metrics.silhouette_score(x, labels)
    scores.append(score)

print(scores)
best_i = scores.index(max(scores)) + 2
print("最佳半径为:", best_i)
db = DBSCAN(eps=best_i, min_samples=2).fit(x)
labels = db.labels_
score = metrics.silhouette_score(x, labels)
print("此时轮廓指数为:", score)

data['cluster_db'] = labels
data = data.sort_values('cluster_db', ascending=True)

pass

输出结果:

[-0.03670705609846274, -0.03670705609846274, -0.06781609566358748, -0.06781609566358748, 0.1626084889128696, 0.12626205982196476, 0.16564759416041527, 0.42951251219183106, 0.49530955296776086, 0.49530955296776086, 0.49530955296776086, 0.49530955296776086, 0.5857040721127795, 0.5857040721127795, 0.5238781710613801, 0.5238781710613801, 0.6731775046455796, 0.6731775046455796]
最佳半径为: 18
此时轮廓指数为: 0.6731775046455796

 

2.代码详解

1.导入数据

可以进行标准化也可以不进行标准化

import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn import metrics

data = pd.read_csv('data.txt', sep=' ')
x = data.iloc[:, 1:5]
# from sklearn.preprocessing import StandardScaler
# std = StandardScaler()
# x = std.fit_transform(x)

 

2.通过循环确定参数最佳值

  • 最后还将分类好的标签添加进了原数据
  • 聚类算法通过轮廓系数来评价算法的好坏:
    • 轮廓系数范围在[-1,1]之间。该值越大,越合理
"""
eps:半径
min_samples:最小密度
labels:分类结果   自动分类 -1为离群点
"""
scores = []
for i in range(2, 20):
    db = DBSCAN(eps=i, min_samples=2).fit(x)
    labels = db.labels_
    score = metrics.silhouette_score(x, labels)
    scores.append(score)

print(scores)
best_i = scores.index(max(scores)) + 2
print("最佳半径为:", best_i)
db = DBSCAN(eps=best_i, min_samples=2).fit(x)
labels = db.labels_
score = metrics.silhouette_score(x, labels)
print("此时轮廓指数为:", score)
data['cluster_db'] = labels
data = data.sort_values('cluster_db', ascending=True)

输出:

 

总结

        两种聚类算法已讲完,聚类算法适合原本没有标签只有特征的数据进行使用

标签:DBSCAN,动图,labels,db,算法,score,samples,data
From: https://blog.csdn.net/weixin_65047977/article/details/141650147

相关文章

  • 路径规划算法
    FieldD*FiledD*算法是D_starLite算法的一种改进版本,该算法针对基于栅格的路径规划算法通常以栅格端点或中心点作为路径的节点,限制了路径方向变化只能为π/4的倍数,会导致机器人不必要的运动转向,影响执行效率。而DaveFerguson提出的FiledD*算法,通过对栅格进行线性插值使路......
  • TPAMI 2024 | 离散且平衡的谱聚类算法:一种可扩展的方法
    DiscreteandBalancedSpectralClusteringWithScalability离散且平衡的谱聚类算法:一种可扩展的方法RongWang,HuiminChen,YihangLu,QianrongZhang,FeipingNie,andXuelongLi摘要谱聚类(SC)因其卓越的聚类性能而成为深入研究的主要课题。尽管取得了成功......
  • 【有源码】基于Python的猫眼电影数据分析可视化与电影推荐系统K-means算法电影票房数
    注意:该项目只展示部分功能,如需了解,文末咨询即可。本文目录1.开发环境2系统设计2.1设计背景2.2设计内容3系统展示3.1功能展示视频3.2系统页面4更多推荐5部分功能代码1.开发环境开发语言:Python采用技术:K-means算法数据库:MySQL开发环境:PyCharm2系统......
  • 代码随想录算法训练营,8月30日 | 203.移除链表元素, 707.设计链表, 206.反转链表
    链表理论基础1.单链表:数据域和指针域(指向下一个结点的位置)组成,头结点,结尾为空指针;双链表:多了一个指向前一个结点的指针;循环链表:结尾指向头结点。2.链表在内存中的存储不是顺序的,跟数组不同,要找一个数据只能通过前一个数据来找,所有这就导致链表的查询比数组麻烦,但是插入删除数据......
  • 数据结构与算法 第四天(串、数组、广义表)
    串(String)任意字符组成的有限序列串的类型定义串的顺序存储结构模式匹配算法确定主串所含字串第一次出现的位置。BF算法穷举法,从每个字符开始依次匹配KMP算法链式存储数组基本操作特殊矩阵存储对称矩阵三角矩阵对角矩阵稀疏矩阵超过95%元素为零......
  • 算法专项—新手村
    一:python输入输出1、python中使用print函数输出语句;默认print输出会打印回车;在python中双引号和单引号的作用是相同的!print("gsupl")print("gsupl","yyds",sep='****')#用****分割print("gsupl"+"yyds")#使用+进行拼接print("guspl"*10)#输出10次......
  • 算法专项—码蹄集
    根据对码蹄集新手村的刷题经验;此片文章对python基本的语法进行简单的总结!一:python输入输出1、python中使用print函数输出语句;默认print输出会打印回车;在python中双引号和单引号的作用是相同的!print("gsupl")print("gsupl","yyds",sep='****')#用****分割print("gsupl"......
  • 「代码随想录算法训练营」第四十九天 | 图论 part7
    目录最小生成树的解题prim算法举例说明(来自代码随想录)题目:53.寻宝Kruskal算法举例说明(来自代码随想录)题目:53.寻宝最小生成树的解题最小生成树类型的题目主要用于解决所有节点的最小连通子图的问题,即:以最小的成本(边的权值)将图中所有节点链接到一起。最小生成树可以使用prim算......
  • 算法设计与分析:实验二 分治法——最近点对问题
    实验内容:对于平面上给定的N个点,给出所有点对的最短距离,即,输入是平面上的N个点,输出是N点中具有最短距离的两点。要求随机生成N个点的平面坐标,应用蛮力法编程计算出所有点对的最短距离。要求随机生成N个点的平面坐标,应用分治法编程计算出所有点对的最短距离。分别对N=100000—10......
  • sha-256算法,生成固定长度的字符串
    SHA-256(安全哈希算法256位)是一种广泛使用的加密哈希函数,它会将输入的任意大小的数据转换为固定长度的256位(32字节)哈希值。SHA-256是SHA-2系列算法的一部分,由美国国家安全局(NSA)设计,并由美国国家标准与技术研究院(NIST)发布。SHA-256的主要特点包括:固定长度输出:无论输入数据的......