常用异常检测模型的应用

news2024/10/4 9:22:39

常用异常检测模型的应用

描述

异常数据检测不仅仅可以帮助我们提高数据质量,同时在一些实际业务中,异常数据往往包含有价值的信息,如异常交易、网络攻击、工业品缺陷等,因此异常检测也是数据挖掘的重要手段。常用的异常检测模型包括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 plt

rd = 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 IsolationForest

X = 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.coloradmin.cn/o/421880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【通过Cpython3.9源码看看python字符串拼接:“+”为什么比join低效】

基本说明 Python字符串拼接中,使用join()方法比运算符更高效,主要原因在于字符串对象的不可变性和内存分配策略。 首先,我们要知道Python字符串是不可变的对象。这意味着,每次使用运算符进行字符串拼接时,Python需要…

Vue2-黑马(四)

目录: (1)axios-响应格式 (2)axios-拦截器 (3)vue2-条件渲染 (4)vue2-列表渲染 (1)axios-响应格式 下面看axios的返回响应对象的内部组成 后…

【grpc02】安装protobuf和protoc

目录 Windows环境 下载通用编译器 配置环境变量 安装go专用的protoc的生成器 GoLang中安装插件 如何使用protobuf呢? Mac环境 Protoc安装 Protoc-gen-go的安装 Windows环境 下载通用编译器 下载地址:v3.20.1 Releases protocolbuffers/pr…

【优化算法】使用遗传算法优化MLP神经网络参数(TensorFlow2)

文章目录任务查看当前的准确率情况使用遗传算法进行优化完整代码任务 使用启发式优化算法遗传算法对多层感知机中中间层神经个数进行优化,以提高模型的准确率。 待优化的模型: 基于TensorFlow2实现的Mnist手写数字识别多层感知机MLP # MLP手写数字识别…

Java支付SDK接口远程调试 - 支付宝沙箱环境【公网地址调试】

文章目录1.测试环境2.本地配置3. 内网穿透3.1 下载安装cpolar内网穿透3.2 创建隧道4. 测试公网访问5. 配置固定二级子域名5.1 保留一个二级子域名5.2 配置二级子域名6. 使用固定二级子域名进行访问转发自CSDN远程穿透的文章:Java支付宝沙箱环境支付,SDK接…

Linux命令·traceroute

通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统…

移动端项目开发总结(一)

移动端项目开发总结(一) 前阵子做租赁项目,风风火火的上线,趁现在还没忘,把用到的东西整理以下,算是对于这个项目的回顾吧。 特效一 : 移动端适配 需求 移动端适配,采用rem单位。…

深入理解Java虚拟机——Java内存区域

1.前言 Java内存区域也叫运行时数据区域,要记得把Java内存模型(JMM区分开来)。 根据线程是否共享可以把运行时数据区如上图所分。 线程共享 堆内存方法区 线程私有 栈内存 本地方法栈虚拟机栈 程序计数器 接下来,将逐个介绍…

什么是文件传输协议,文件传输协议又是怎么工作的

文件传输协议FTP是一种仍在使用的协议,在上载和下载文件时仍然比较流行,通常是那些太大的文件,需要花费很长时间才能通过常规电子邮件程序作为附件下载进行传输。 从技术上讲,它是“文件传输实用程序”,是许多TCP / I…

腾讯云4核8G12M轻量服务器配置性能评测

腾讯云轻量4核8G12M服务器,之前是4核8G10M配置,现在公网带宽和月流量包整体升级,12M公网带宽下载速度可达1536KB/秒,系统盘为180GB SSD盘,每月2000GB免费流量,腾讯云百科来详细说下4核8G12M轻量应用服务器配…

碳化硅材料在功率半导体中的优劣

开关电源工作频率的提高受到开关损耗的制约 开关电源的工作频率是指开关变换器操作的频率。在开关电源中,一个开关变换器被用来将直流(DC)能源转换为可用于电子设备的交流(AC)能源。开关变换器的基本原理是通过对开关…

3.4 函数的单调性和曲线的凹凸性

学习目标: 如果我要学习函数的单调性和曲线的凹凸性,我会采取以下几个步骤: 理解概念和定义:首先,我会学习单调性和凹凸性的定义和概念。单调性是指函数的增减性质,可以分为单调递增和单调递减&#xff1b…

Python使用PyQt5实现指定窗口置顶

文章目录前言一、网上找到的代码二、尝试与借鉴后的代码——加入PyQt界面1.引入库2.主代码3.完整主代码4.UI界面代码总结前言 工作中,同事随口提了一句:要是能让WPS窗口置顶就好了,老是将窗口切换来切换去的太麻烦了。 然后,这个…

docker-compose 安装nginx php mysql phpadmin

一 摘要 本文主要介绍基于docker docker-compose 安装 lnmp 三件套,以及用phpmysadmin 验证下部署可正确。 二 环境信息 2.1 操作系统 [root2023001 ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) [root2023001 ~]#2.2 docker [root20230…

【opencv】图像数字化——认识OpenCV中的Mat类( 7 访问多通道Mat对象中的值)

7 访问多通道Mat对象中的值 7.1使用成员函数at() #include <opencv2/core/core.hpp> #include<iostream> using namespace std; using namespace cv; int main() {Mat mm (Mat_<Vec3f>(2, 2) << Vec3f(1, 11, 21), Vec3f(2, 12, 32), Vec3f(3, …

C++【深入理解多态】

文章目录一、多态概念与实现&#xff08;1&#xff09;多态的概念&#xff08;2&#xff09;怎么构成多态&#xff08;3&#xff09;虚函数重写的2个例外&#xff08;4&#xff09;经典剖析巩固知识点&#xff08;5&#xff09; override 和 final&#xff08;6&#xff09;小总…

YOLO算法改进指南【初阶改进篇】:2.改进DIoU-NMS,SIoU-NMS,EIoU-NMS,CIoU-NMS,GIoU-NMS

非极大值抑制(Non-maximum Suppression (NMS))的作用简单说就是模型检测出了很多框,我应该留哪些。 本篇将演示如何修改:NMS、Merge-NMS、Soft-NMS、CIoU-NMS、DIoU-NMS、GIoU-NMS、EIoU-NMS、SIoU-NMS 1. NMS过程 NMS过程 For a prediction bounding box B, the model c…

基于JDK11从源码角度剖析可重入锁ReentrantLock的获取锁和解锁

ReentrantLock是可重入的独占锁&#xff0c;同时只能有一个线程可以获取该锁&#xff0c;其他获取该锁的线程会被阻塞而被放入该锁的AQS阻塞队列里面。 ReentrantLock是JUC包提供的显式锁的一个基础实现类&#xff0c;实现了Lock接口。我们先来看下ReentrantLock的类图&#x…

SpringBoot WebSocket服务端创建

引入maven <!--websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>新建WebSocket配置文件 import org.springframework.context.annotatio…

【蓝桥杯嵌入式】第十四届蓝桥杯嵌入式省赛(第一场)客观题及详细题解

题1 解析  编码器&#xff0c;具有编码功能的逻辑电路&#xff0c;能将每一个编码输入信号变换为不同的二进制的代码输出&#xff0c;是一个组合逻辑电路。 答案 ABC 题2 解析   减法计数器的计数值到0时&#xff0c;会产生一个重装载值&#xff0c;此处重载后就会变成111…