常用异常检测模型的应用

news/2024/11/13 4:29:59/

常用异常检测模型的应用

描述

异常数据检测不仅仅可以帮助我们提高数据质量,同时在一些实际业务中,异常数据往往包含有价值的信息,如异常交易、网络攻击、工业品缺陷等,因此异常检测也是数据挖掘的重要手段。常用的异常检测模型包括IsolationForest(孤立森林)、OneClassSVM(一类支持向量机)、LocalOutlierFactor(LOF,局部离群因子)等。

本任务的主要实验内容包括:

1、分别使用IsolationForest(孤立森林)、OneClassSVM(一类支持向量机)、LocalOutlierFactor(LOF,局部离群因子)进行异常数据检测。

2、比较上述异常检测模型用法的区别,熟悉选择原则。

源码下载

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    scikit-learn	0.24.2
    matplotlib      3.3.4
    numpy           1.19.5
    

分析

本任务涉及以下环节:

A)创建包括正常样本和异常样本的数据集、并可视化

B)使用孤立森林模型进行异常检测

C)使用OneClassSVM进行异常检测

D)使用LOF模型进行异常检测

实施

1、创建数据集,并可视化

import numpy as np
import matplotlib.pyplot as pltrd = np.random.RandomState(99) # 设置随机状态
X_1 = 0.3 * rd.randn(100, 2) # 生成正常数据
X_2 = rd.uniform(-4, 4, size=(20, 2)) # 生成噪音数据plt.title('Data') # 标题
plt.xlim(-5, 5) # x轴刻度
plt.ylim(-4, 3) # y轴刻度
plt.scatter(X_1[:, 0], X_1[:, 1], s=50, c='g', edgecolor='k', label='normal') # 画正常点
plt.scatter(X_2[:, 0], X_2[:, 1], s=50, c='w', edgecolor='k', label='outlier') # 画异常点
plt.legend()
plt.show()

结果如下:

请添加图片描述

说明:Normal为正常数据,Outlier为噪音点(异常点),接下来使用异常检测模型进行检测,熟悉其调用方法、参数及效果。

2、使用孤立森林(IsolationForest)进行异常检测

from sklearn.ensemble import IsolationForestX = np.concatenate((X_1, X_2), axis=0) # 合并数据# IsolationForest 
clf = IsolationForest(contamination=0.16) # 创建模型
y_pred = clf.fit_predict(X) # 拟合并预测plt.title('IsolationForest') # 标题
plt.xlim(-5, 5) # x轴刻度
plt.ylim(-4, 3) # y轴刻度
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=50,  edgecolor='k') # 可视化预测结果
plt.show()

结果如下(左图):
请添加图片描述

请添加图片描述

说明:与原数据(右图)对比发现,通过简单调参,独立森林(iForest)算法较好地检测出了原数据中的异常点。

3、使用OneClassSVM(一类支持向量机)进行异常检测

from sklearn.svm import OneClassSVM# OneClassSVM
clf = OneClassSVM(nu=0.02).fit(X_1) # 拟合训练数据(注意:这里是X_1,不含噪音点)
y_pred = clf.predict(X) # 预测plt.title('OneClassSVM')
plt.xlim(-5, 5) # x轴刻度
plt.ylim(-4, 3) # y轴刻度
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=50, edgecolor='k')
plt.show()

结果如下:

请添加图片描述

说明:OneClassSVM 本质上属于奇异点检测(Novelty Detection),要求训练数据中不包含噪音点,在未被污染的数据上建立模型,然后在新数据中寻找异常点。

4、使用LocalOutlierFactor(LOF)进行异常检测

from sklearn.neighbors import LocalOutlierFactor# LocalOutlierFactor
clf = LocalOutlierFactor(contamination=0.16) # 创建模型
y_pred = clf.fit_predict(X) # 拟合数据并预测plt.title('LocalOutlierFactor') # 标题
plt.xlim(-5, 5) # x轴刻度
plt.ylim(-4, 3) # y轴刻度
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=50, edgecolor='k') # 预测结果可视化
plt.show()

结果如下:

请添加图片描述

说明:通过调参,LocalOutlierFactor(LOF-局部离群因子)模型也较好地检测出了原数据中的异常点。

“异常值比例”是上述三种异常检测模型共同的参数,决定了正常数据和异常数据的分界线,通常需要根据具体的任务数据调参确定。模型的选择原则是:如果训练集不包含异常样本,则选择OneClassSVM;如果训练集中包括异常样本并且训练集能基本覆盖正常样本,则选择LOF,其他情况使用IsolationForest(孤立森林)。孤立森林的适用性较强,在数据情况不明时可以优先尝试。


http://www.ppmy.cn/news/40488.html

相关文章

spring 概述

正常的三层架构违背了OCP开闭原则,DIP依赖倒置原则 OCP核心原则为:只要你在扩展系统功能的时候,没有修改过以前写好的代码,就负责OCP原则,反之,如果在扩展系统功能的时候,修改了,则这个设计是失…

Java 微服务架构

Java 微服务架构是一个分布式系统,由多个小型、松耦合的服务组成,每个服务运行在独立的进程中,并通过轻量级的协议进行通信。微服务架构的优势在于提高了应用的可伸缩性、灵活性和可维护性,同时还可以使团队更容易协作开发。 下面…

pixel显示网络无法连接解决

pixel显示网络无法连接解决 可以上网,但显示不可上网 输入以下三行命令即可 adb shell settings put global captive_portal_server www.google.cn adb shell settings put global captive_portal_https_url https://www.google.cn/generate_204 adb shell setting…

使用模板窗口生成测试数据

1. 准备工作 需要的环境 Oralce、MySQL、PG等主流数据库HHDBCS7.6及以上版本 测试步骤 建立两张表带有主外键关系使用模板窗口生成数据,主键表生成100条,外键表生成10000条校验数据生成情况 2. 建立两张表带有主外键关系 主键表 create table dept…

java 有继承关系的类的静态变量和非静态变量以及代码块的初始化顺序

类B继承A 在main函数中new一个B类对象 1.父类 静态变量初始化和静态代码先执行 2.再执行子类静态变量初始化和静态代码块 3.再进入B类构造器,以下图顺序进行执行 B中super进入A类构造器,同样是以这个顺序进行执行,A的父类是Object&#x…

本地安装WSL的发行版后,导出到另一台计算机安装的办法

一、步骤 1、首先你要在你的计算机上安装成功了WSL子系统,然后才能导出对应版本的tar文件,复制到另一台计算机中进行安装 2、例如我的电脑安装了Ubuntu 20.04.5这个版本,如图: 3、同时可以在命令提示符中只用命令wsl --list --ve…

脂肪肝 肾结石 怎么得来的

脂肪肝怎么得来的1.脂肪肝2.肾结石是如何产生的?1.脂肪肝 是由于肝细胞内脂肪堆积过多引起的慢性疾病,引起脂肪肝的因素有多种,由于常常没有自觉症状,往往不易引起人们的重视。常见原因有以下几种: 第一、过量饮酒&a…

人工智能在采购中的应用有哪些?

清楚地了解人工智能如何融入采购流程是非常有益的。这种专业知识至关重要,尤其是在技术不断进步的情况下。 尽管人工智能在采购中的应用仍处于起步阶段,但其在采购中的应用已有若干实例。你会遇到的一些最常见的用途包括: 加强电子战略采购…