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

Python异常检测- DBSCAN

系列文章目录

Python异常检测- Isolation Forest(孤立森林)
python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS)
python异常检测-局部异常因子(LOF)算法


文章目录

  • 系列文章目录
  • 前言
  • 一、DBSCAN算法原理
  • 二、DBSCAN算法流程
  • 三、DBSCAN算法的优缺点
  • 四、DBSCAN算法的python实现


前言

基于DBSCAN算法的异常检测是一种非监督学习方法,它可以在没有先验知识或标签的情况下检测数据中的异常值。

一、DBSCAN算法原理

DBSCAN,全称Density-Based Spatial Clustering of Applications with Noise,是一种基于密度的聚类算法。该算法假设异常值在数据中的密度要么很低,要么与其他数据点分离得很远。在DBSCAN算法中,密度被定义为每个点周围一定距离内存在的其他点数目。如果一个点周围的密度大于某个预设的阈值,则将该点视为核心点,否则将其视为噪声点。
DBSCAN的基本原理:

  • Eps:一个阈值,定义了邻域的半径,即在多大的距离范围内,一个点被认为是另一个点的邻域。

  • MinPts:一个阈值,定义了核心点的邻域内至少需要包含的点数,当一个点的Eps邻域内包含的点数大于或等于MinPts,这这个点被认为是核心点。

  • 核心点:在Eps邻域内至少有MinPts个点的点。

  • 边界点:邻域内没有达到MinPts个点,但某个核心点的邻域内的点。

  • 噪声点:既不是核心点也不是边界点的点,这些点通常都是异常值。

二、DBSCAN算法流程

假定DBSCAN算法的输入和输出如下图所示,对于无法形成聚类簇的孤立点,即为异常点(噪声点),DBSCAN算法的流程如下:

1.选择Eps和MinPts;

2.随机选择一个未访问的数据点;

3.对于参数Eps和MinPts,则找出所有从选择点的p密度可达的数据对象点,形成一个簇;

4.重复步骤2,将新发现的点也加入该簇,直到簇中没有新的点可以加入;

5.如果该簇中的点数目大于某个预设的最小点数,则将该簇标记为核心点;

6.重复步骤2-5,直到所有的点都被访问过。

7.将未被标记为核心点的点视为噪声点;

8.对未被标记的核心点进行簇的扩展,将其与可达的核心点合并成一个簇;

9.将每个簇视为一个异常检测器,使用该簇中的点来检测数据中的异常值。

在这里插入图片描述

三、DBSCAN算法的优缺点

DBSCAN算法的不需要先验知识或标签,而且可以处理不同形状和大小的簇。但是,它对密度参数的选择比较敏感,因此需要进行参数调优。
DBSCAN的优点:

  • 能够发现任意形状的聚类,并且对数据集的噪声点数量敏感度低。

  • 不需要指定预先确定的聚类数。

DBSCAN的缺点:

  • 参数Eps和MinPts的选择对聚类结果影响很大。

  • 对于非密集区域的数据集,DBSCAN的性能不如K-means算法。

四、DBSCAN算法的python实现

使用scikit-learn库中的DBSCAN算法进行异常值检测,首先需要安装scikit-learn库

pip install scikit-learn

然后按照以下步骤来实现:

  1. 导入所需的库;
  2. 准备数据集;
  3. 创建模型并训练数据;
  4. 使用模型预测类别,并识别出噪声点(即异常值)
    具体的python代码如下:
# 导入必要的库
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons
from sklearn.preprocessing import StandardScaler
import numpy as np

# 生成一个模拟数据集
X, labels = make_moons(n_samples=200, noise=0.05, random_state=0)
X = StandardScaler().fit_transform(X)  # 标准化数据

# 创建一个DBSCAN实例
db = DBSCAN(eps=0.3, min_samples=5)

# 拟合数据
db.fit(X)

# 获取每个样本的簇标签
labels = db.labels_

# 噪声点的标签为 -1
anomalies = X[labels == -1]

# 打印异常值的数量
print(f"Number of anomalies detected: {len(anomalies)}")

# 如果你想可视化这些点
import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
# 高亮显示异常值
plt.scatter(anomalies[:, 0], anomalies[:, 1], color='r', marker='x')
plt.title("Anomaly Detection using DBSCAN")
plt.show()

参考资料
统计学&Python】数据异常如何检验?14种检验方法!
数据处理和分析之数据预处理:异常值处理(DBSCAN算法在异常值检测中的应用)
基于dbscan算法的异常检测


http://www.kler.cn/news/364417.html

相关文章:

  • Java SnakeYaml 反序列化漏洞原理
  • Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
  • 使用 Python 和 Pandas 处理 Excel 数据:合并单元格示例
  • U9的插件开发之BE插件(1)
  • 电子设备老化实验怎么做?
  • 大模型系列——幻觉
  • ASP.NET MVC-font awesome-localhost可用IIS不可用
  • 51单片机快速入门之 串行通信 2024/10/21
  • Android Activity SingleTop启动模式使用场景
  • webpack生成的SourceMap更改生成路径
  • Python 打包成 EXE 的方法详解
  • 管理类联考 信息整理和经验分享
  • 洞察数据之美:用可视化探索销售与温度的关系
  • Java中String、StringBuffer和StringBuilder的区别是什么?
  • 【赵渝强老师】Oracle的参数文件与告警日志文件
  • 微信小程序25__实现卡片变换
  • Qt 学习第 天:线程与多线程
  • 4个在线抠图网站,AI一键智能抠图,3秒抠出!
  • 自学C语言——函数(全)
  • 基于单片机的短信火灾报警系统
  • 错误:无法推送一些引用到 ‘https://gitee.com/chek_kk/python-electron-app.git‘
  • RHCSA笔记一
  • 反悔贪心学习笔记[浅谈]
  • 【Axure高保真原型】分级树筛选中继器表格
  • 基于 Python 的机器学习模型部署到 Flask Web 应用:从训练到部署的完整指南
  • 深入计算机语言之C++:类与对象(中)