随笔 - 942,  文章 - 0,  评论 - 37,  阅读 - 54万

简介

参考链接

https://blog.csdn.net/weixin_46344368/article/details/106312536?spm=1001.2014.3001.5502

code

# 实战 异常检测
#加载数据
import pandas as pd
import numpy as np
data = pd.read_csv('anomaly_data.csv')
data.head()
#数据可视化
%matplotlib inline
from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(10,7))
plt.scatter(data.loc[:,'x1'],data.loc[:,'x2'])
plt.title("data")
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()
#define x1 and x2
x1 = data.loc[:,'x1']
x2 = data.loc[:,'x2']
#将数据分布进行一个可视化
import matplotlib as mlp
font2 = {'family' : 'SimHei','weight' : 'normal','size' : '20' }#定义一下字体(根据自己喜好定义即可)
mlp.rcParams['font.family'] =  'SimHei' #设置字体
mlp.rcParams['axes.unicode_minus'] = False #字符显示
fig2 = plt.figure(figsize=(20,7))
plt.subplot(121)
plt.hist(x1,bins=100) #分成100个数据分隔,即有100条条状图
plt.title('x1 数据分布统计',font2)
plt.xlabel('x1',font2)
plt.ylabel('出现次数',font2)
plt.subplot(122)
plt.hist(x2,bins=100) #分成100个数据分隔
plt.title('x2 数据分布统计',font2)
plt.xlabel('x2',font2)
plt.ylabel('出现次数',font2)
plt.show()
#计算x1、x2的均值(mean)和标准差(sigma)
x1_mean = x1.mean()
x1_sigma = x1.std()
x2_mean = x2.mean()
x2_sigma = x2.std()
print(x1_mean,x1_sigma,x2_mean,x2_sigma)
#计算高斯分布概率密度函数
from scipy.stats import norm
x1_range = np.linspace(0,20,300) #范围是0到20,300个点均分
x1_normal = norm.pdf(x1_range,x1_mean,x1_sigma) #计算高斯分布概率密度函数
x2_range = np.linspace(0,20,300)
x2_normal = norm.pdf(x2_range,x2_mean,x2_sigma)
#可视化高斯分布概率密度函数
fig3 = plt.figure(figsize=(20,7))
plt.subplot(121)
plt.plot(x1_range,x1_normal)
plt.title('normal p(x1)')
plt.subplot(122)
plt.plot(x2_range,x2_normal)
plt.title('normal p(x2)')
plt.show()
#建立模型
from sklearn.covariance import EllipticEnvelope
ad_model = EllipticEnvelope()
ad_model.fit(data)
#预测
y_predict = ad_model.predict(data)
print(pd.value_counts(y_predict))
#可视化结果
fig4 = plt.figure(figsize=(10,6))
orginal_data=plt.scatter(data.loc[:,'x1'],data.loc[:,'x2'],marker='x') #将各点用'x'表示
anomaly_data=plt.scatter(data.loc[:,'x1'][y_predict==-1],data.loc[:,'x2'][y_predict==-1],marker='o',facecolor='none',edgecolor='red',s=150)
#y_predict==-1即是异常点; marker='o'将异常点用圆圈圈起来; facecolor='none' 不填充,即空心圆; edgecolor='red' 颜色为红色; s=150 圆圈的大小.
plt.title('自动寻找异常数据',font2)
plt.xlabel('x1',font2)
plt.ylabel('x2',font2)
plt.legend((orginal_data,anomaly_data),('原数据','检测异常点'))
plt.show()
#将contamination的值改为0.03
ad_model = EllipticEnvelope(contamination=0.03)
ad_model.fit(data)
y_predict = ad_model.predict(data)
fig5 = plt.figure(figsize=(20,7))
orginal_data=plt.scatter(data.loc[:,'x1'],data.loc[:,'x2'],marker='x')
anomaly_data=plt.scatter(data.loc[:,'x1'][y_predict==-1],data.loc[:,'x2'][y_predict==-1],marker='o',facecolor='none',edgecolor='red',s=150)
plt.title('anomaly detection result')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend((orginal_data,anomaly_data),('original_data','anomaly_data'))
plt.show()

image

posted on   HDU李少帅  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2021-04-22 jdbc 操作步骤

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示