基于DBSCAN算法聚类对数据的异常值报警处理(数据挖掘)

背景:有不同型号的焊接头在一段时间的磨损程度,当磨损程度出现异常了,报警,提醒更换焊接头

难点:如何确定怎样算异常,数据分析方法

知识点:DBSCAN算法

思路:

1.将磨损数据进行差分求绝对值取平均值作为聚类算法的半径,项目部署后设置每5min自动运行一次,每次只取后面20个值进行聚类分析,找出异常值(噪音点),一旦找到,就预警。

DBSCAN算法介绍

DBSCAN(Density-Based Spatial Clustering of Application with Noise)是一种典型的基于密度的聚类算法,在DBSCAN算法中将数据点分为一下三类:

  1. 核心点:在半径Eps内含有超过MinPts数目的点
  2. 边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内
  3. 噪音点:既不是核心点也不是边界点的点(离群点)

性质:

1、DBSCAN聚类算法的优缺点包括:

        不需要预先指定簇的数量。
        能够识别离群点和噪声点。
        能够处理任意形状的簇。
        对于密度高的簇能够表现出色。
2、DBSCAN聚类算法的缺点包括:

        对于密度低的簇,聚类效果可能不如其他算法。
        对于高维数据,聚类效果可能不佳。
3、DBSCAN聚类算法的应用包括:

        图像分割
        地理信息系统中的空间聚类
        计算机视觉中的对象跟踪
        社交网络分析中的社群发现

构建

1.两个参数

  • eps:它是特定邻域的半径。如果两点之间的距离小于或等于 esp,则将其视为其邻居。
  • minPts:给定邻域中形成簇的最小数据点数量。

2.代码

import pandas as pd
from sklearn.cluster import DBSCAN
import numpy as np

# 读取Excel数据
data = pd.read_excel('path')

# 将日期列转换为日期时间类型
data['DATE'] = pd.to_datetime(data['DATE'])

# 取最后10个数据
last_10_data = data[column_name].tail(10000)
print(last_10_data)

# 计算数据差分的绝对值然后求平均值作为半径
radius = np.mean(np.abs(np.diff(last_10_data)))
print("radius:",radius)
last_10_data_array = last_10_data.values.reshape(-1, 1)  # 将数据转换为二维数组

# 创建DBSCAN对象
dbscan = DBSCAN(eps=radius, min_samples=10)

# 进行聚类
labels = dbscan.fit_predict(last_10_data_array)

# 标记噪声点
noise_points = np.where(labels == -1)[0]  # 找到噪声点的索引
num_noise_points = list(labels).count(-1)
if num_noise_points>0:
        print("ALERT: Detected noise points!")  # 执行报警逻辑,如发送警报通知等
print("Noise points:", last_10_data.iloc[noise_points])  # 输出噪声点的具体数值
print("噪声点的数目:", num_noise_points)

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值