当前位置: 首页 > article >正文

详解机器学习经典模型(原理及应用)——DBSCAN

一、概念

        DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它能够在具有噪声的空间数据集中发现任意形状的聚类(即带噪声的聚类模型)。DBSCAN将簇定义为密度相连的点的最大集合,通过在数据空间中找到高密度区域作为簇,同时把孤立点(密度低的点)归为噪声。此外,DBSCAN最大的优势就是它不需要指定聚类簇的数量

二、模型原理

1、相关概念

  • ε-邻域(Epsilon-neighborhood):对于某个点p,以半径ε为边界的区域内所有的点称为该点的ε-邻域。
  • 核心点(Core Point):如果一个点p的ε-邻域内至少有min_samples个点(包括p自己),那么它被称为核心点。
  • 边界点(Border Point):如果一个点p在某个核心点的ε-邻域内,但自身不是核心点,它被称为边界点。
  • 噪声点(Noise Point):如果一个点既不是核心点,也不属于任何核心点的邻域,它被认为是噪声点。
  • 密度直达(Directly Density-Reachable):如果点p是核心点,并且点q在p的ε-邻域内,那么q被称为从p密度直达。
  • 密度可达(Density-Reachable):如果存在一条核心点链表(p1→p2→...→pn),使得每个点从前一个点密度直达,且p1=p,pn=q,则q是从p密度可达的。
  • 密度相连(Density-Connected):如果存在一个点o,使得p和q都从o密度可达,则称p和q是密度相连的。

2、算法流程

(1)初始化

  • 遍历数据集中的每个点p。
  • 对于每个点p,找到其ε-邻域(由我们定义,需要多次尝试找到最优值)内的所有点。

(2)形成聚类

  • 如果p是核心点,创建一个新的聚类C,并将p添加到C。
  • 将p的 ε-邻域内的所有直接密度可达的点添加到C。
  • 递归地,将这些点的直接密度可达的点添加到C。

(3)处理边界点和噪声

  • 如果一个点不是核心点,也不是任何核心点的直接密度可达点,则将其标记为噪声。需要注意的是,噪声点的数量跟ε参数和min_samples参数的取值有关,在不同的取值范围内,点A可能是噪声,也可能是核心点。

(4)合并聚类

  • 如果两个聚类密度相连,则将它们合并为一个聚类。

三、python示例

        这里我们使用iris数据集,由于这个数据集的数据量很少,因此如果min_samples设置得稍微大一点,模型就会将所有的点都看作噪声。最佳参数可以通过网格搜索并结合聚类评估指标来确定。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 数据预处理:标准化特征值
X_scaled = StandardScaler().fit_transform(X)

# 创建DBSCAN模型实例
# eps 是邻域的大小,min_samples 是形成聚类所需的最小样本数
dbscan = DBSCAN(eps=0.2, min_samples=2)

# 执行聚类
clusters = dbscan.fit_predict(X_scaled)

# 可视化聚类结果
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=clusters, cmap='viridis', marker='o')
plt.title('DBSCAN Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.colorbar(label='Cluster Label')
plt.show()

# 打印聚类结果的统计信息
n_clusters_ = len(set(clusters)) - (1 if -1 in clusters else 0)  # 减去噪声点
n_noise_ = list(clusters).count(-1)
print(f'Estimated number of clusters: {n_clusters_}')
print(f'Estimated number of noise points: {n_noise_}')

四、总结

        DBSCAN是探索性数据分析、数据挖掘中常用的机器学习模型。由于我们在初期数据探索和挖掘阶段,无法很好地确定数据应当聚成多少类,因此K-Means等需要指定聚类簇数量的模型显得不那么有效了。通过调整DBSCAN模型的邻域半径和最小簇内样本数,并结合轮廓系数等聚类评估方法,可以有效地帮助我们自动将数据聚合成相对有意义的N个类簇,从而辅助我们进行数据探索和分析。例如,在NLP领域,尤其是热点挖掘、观点分析等业务中,DBSCAN以及它的优化版变体HDBSCAN都是建模利器。

 


http://www.kler.cn/a/393156.html

相关文章:

  • QQ 小程序已发布,但无法被搜索的解决方案
  • 设计模式之责任链模式(Chain Of Responsibility)
  • 相机光学(四十二)——sony的HDR技术
  • 冗余连接2 hard题 代随C#写法
  • 【金融风控】特征评估与筛选详解
  • [CKS] 关闭API凭据自动挂载
  • C++网络编程之SSL/TLS加密通信
  • turtlesim修改窗口大小;添加自己的小乌龟;
  • React Native 全栈开发实战班 - 列表与滚动视图
  • 【无线传感器网络】数据集合集!
  • 云服务器搭建及Docker使用---清风
  • 贪心算法理论
  • 集群聊天服务器(2)Json介绍
  • android studio中按钮提示Hardcoded string “XX“, should use `@string` resource
  • 【windows 下使用 tree】
  • sql专题 之 where和join on
  • AI数字人使用的技术及应用场景
  • 卷积神经网络CNN——卷积层、池化层、全连接层
  • ubuntu 安装kafka-eagle
  • 遗传算法与深度学习实战——利用进化计算优化深度学习模型
  • 麒麟V10,arm64,离线安装docker和docker-compose
  • 【react】React Router基础知识
  • Rust编程与项目实战-函数指针
  • 案例学习java
  • AI大模型开发架构设计(18)——基于大模型构建企业知识库案例实战
  • 24年下软考网络工程师真题及答案,估分、备考速看!