ML07 My_Abnormal_Detection
2021/10/1 23:14:19
本文主要是介绍ML07 My_Abnormal_Detection,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
ML实战:手动实现异常检测算法
- 这里使用了改良版本,即使用多元高斯分布函数,提高了对数据相关性的适应
代码实现
Detaction类
import numpy as np from math import exp,pow,pi np.set_printoptions(suppress=True) class Detection: def __init__(self,x): ''' :param x:训练集 :param n:特征数 :param u:每个特征的均值 :param cov:协方差矩阵 ''' self.x=x self.n=len(x[0]) def fit(self): #参数拟合 m=len(self.x) self.u=np.sum(self.x,axis=0)/m temp=self.x-self.u self.cov=np.matmul(temp.T,temp)/m def predict(self,x): #预测函数 cov=np.linalg.inv(self.cov) p=exp(((x-self.u)@cov@(x.T-self.u.T))*(-0.5))/pow(np.linalg.det(2*pi*self.cov),0.5)#多元高斯分布函数 if p<10e-4: return 1 else: return 0
主函数
from sklearn.datasets import make_blobs import matplotlib.pyplot as plt import numpy as np import sys from Detection_class import Detection from sklearn.model_selection import train_test_split np.set_printoptions(suppress=True) color=['blue','red'] label=['Normal','Abnormal'] #生成数据,1000个正常样本,以及三类异常样本各10个 x, y = make_blobs(n_samples=[1000,10,10,10], n_features=2, random_state=np.random.randint(0,30)) x_postive=x[y==0,:] x_error=x[y!=0,:] x_train,x_test=train_test_split(x_postive,test_size=0.3,random_state=np.random.randint(0,30)) y_test=[0]*len(x_test)+[1]*len(x_error) y_test=np.array(y_test) x_test=np.r_[x_test,x_error] #调用fit算法,实现参数拟合 detection=Detection(x_train) detection.fit() #处理测试集的预测结果 y_predict=[] for i in x_test: y_predict.append(detection.predict(i)) y_predict=np.array(y_predict) print(len(y_predict[y_predict==0])) #实现结果可视化,与真实值对比 plt.figure(figsize=(12, 5), dpi=80) for i in range(2): plt.scatter(x_test[y_test==i, 0], x_test[y_test==i,1],marker='o',s=8,c=color[i],label=label[i]) plt.title('Real Data') plt.legend(loc=[1, 0]) plt.savefig('E:\python\ml\ml by myself\Abnormal_Detection\Abnormal_Detection_real.png') for i in range(2): plt.scatter(x_test[y_predict==i, 0], x_test[y_predict==i,1],marker='o',s=8,c=color[i],label=label[i]) plt.title('Predict Result') plt.savefig('E:\python\ml\ml by myself\Abnormal_Detection\Abnormal_Detection_predict.png') sys.exit(0)
结果
这篇关于ML07 My_Abnormal_Detection的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享