0
点赞
收藏
分享

微信扫一扫

数据预处理之异常值检测

Ad大成 2023-07-13 阅读 26

目录

一、前言

二、任务准备

三、采用DBSCAN聚类进行异常检测


一、前言


 

二、任务准备

(1)库准备:

import excelReader
import gspread
import xlrd
import pandas as pd
from sklearn import metrics
import numpy as np

(2)数据准备:

data = pd.read_excel("D:\\dataspace\\已结束项目任务数据.xls")
data=pd.DataFrame(data)
print(data)
pd.set_option('display.max_rows',None)
pd.set_option('display.max_columns', None)
print("维度:",data.shape)
print("信息展示\n",data.info)
print("数据类型\n",data.dtypes)
x=data.iloc[:,[1,2]].values
#切分经度纬度两列数据作为异常检测的目标数据

 


 

三、采用DBSCAN聚类进行异常检测

(1)首先引入DBSCAN的算法原理。

注:在编写代码时,可使用DBSCAN函数来构建模型,其中eps表示邻域半径。设置参数时考虑eps 的取值是否过大覆盖了特征的所有区域。

(2)调整eps参数,确定最优的min_samples的范围。

from sklearn.cluster import DBSCAN
score1list = []
for i in range(1,11):
model_dbs = DBSCAN(eps=0.2, min_samples=i)
labels1 = model_dbs.fit_predict(x)
score1 = metrics.silhouette_score(x, labels1)
score1list.append(score1)
print('轮廓系数\n',score1list)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['KaiTi']
plt.plot(range(1,11),score1list,'o-')
plt.title('silhouette score')
plt.xlabel('min_samples',size=12)
plt.ylabel('轮廓系数',size=12)
plt.show()

 

(3)设定最优参数,绘制DBSCAN分类法散点图。

model_dbs = DBSCAN(eps=0.2,min_samples=2)
Ypred2 = model_dbs.fit_predict(x)
print(Ypred2)
Y1=pd.DataFrame(Ypred2).value_counts().sort_index()
print(Y1)
import matplotlib.pyplot as plt
plt.title("DBSCAN 分类法散点图")
plt.scatter(x[Ypred2==0,0],x[Ypred2==0,-1],c="blue",label='0')
plt.scatter(x[Ypred2==-1,0],x[Ypred2==-1,-1],c='yellow',label='1')
plt.legend()
plt.show()

 

(4) 统计异常点检测结果:

print('DBscan 异常点检测结果',data[Ypred2==-1])
print(data[Ypred2==-1]["任务执行情况"].value_counts())

 根据 DBscan 异常点的检测结果,可得出以下结果:

 

 

 

 

举报

相关推荐

0 条评论