什么是One-Class SVM

1. 简介

        单类支持向量机,简称One-Class SVM(One-Class Support Vector Machine),用于异常检测和离群点检测(无监督学习,其他svm属于有监督的),可以在没有大量异常样本的情况下有效地检测异常。其目标是通过仅使用正常数据来建模,识别出与正常模式不同的异常数据点。其在处理高维数据和非常稀疏的异常检测问题时非常有用。

      严格来说,OCSVM不是一种outlier detection,而是一种奇异点检测(novelty detection)方法:它的训练集不应该掺杂异常点,因为模型可能会去匹配这些异常点。但在数据维度很高,或者对相关数据分布没有任何假设的情况下,OCSVM也可以用于outlier detection。

1. novelty detection: 当训练数据中没有离群点,我们的目标是用训练好的模型去检测另外发现的新样本;
2. outlier detection: 当训练数据中包含离群点,模型训练时要匹配训练数据的中心样本,忽视训练样本中的其他异常点。

        在one-class classification中,仅仅只有一类的信息是可以用于训练,其他类别的(总称outlier)信息是缺失的,也就是区分两个类别的边界线是通过仅有的一类数据的信息学习得到的。对比与有正负样例的二分类SVM,OCSVM可以训练出一个高维超球面,把数据尽可能紧的包围起来。二分类不但能识别是否为目标类别,还能输出样本具体类别;而单分类只需判断是否为目标类别即可。

2. 基本原理

 算法思路:

        就是寻找一个超平面将样本中的正例圈出来(该超平面将正常样本和异常样本分隔开),预测就是用这个超平面做决策,在圈内的样本就认为是正样本。这个超平面被称为“分割超平面”,并且由支持向量支持,即最靠近分割超平面的正常样本点。
具体算法描述:
  没有类别标签,如何寻找划分的超平面以及寻找支持向量机呢?一种特别的思想SVDD,我们期望所有不是异常的样本都是正类别,同时它采用一个超球体而不是一个超平面来做划分,该算法在特征空间中获得数据周围的球形边界,期望最小化这个超球体的体积,从而最小化异常点数据的影响。

        它通过构造原点与单类训练数据之间的超平面,进而可以判断测试数据与单类训练数据之间相似与否,如果测试集数据与单类训练数据相似,则可以将其归为相似样本,记为1,如果测试集数据与单类训练集数据不相似,则记为-1。由于其可以通过超平面的构建,发现待预测数据与训练集数据“相似与否”,进而该模型可以用作异常点检测。

1. 数据映射 -- 核函数

        OCSVM使用核函数来将数据映射到高维空间。常用的核函数包括线性核、多项式核和高斯核。这些核函数允许OCSVM在原始特征空间中找到非线性分割超平面。但由于核函数计算比较耗时,数据量较大时不太适用。

2. 寻找最优超平面

        其目标是找到一个分割超平面(通过最大化超平面与正常数据之间的间隔),使得正常数据点能够被该超平面所包围(正常样本远离该超平面,而异常样本尽可能接近),这个超平面被称为决策边界。这个分割超平面的法向量和距离到原点的距离是训练过程中优化的参数。

        支持向量是离分割超平面最近的正常样本点,它们决定了分割超平面的位置和方向。在训练过程中,OCSVM会选择最优的支持向量,以使分割超平面最大化远离正常样本。

3. 异常检测

        对于新的数据点,通过计算其与超平面的距离,来判断该数据点是否为异常。距离较大的数据点更有可能是异常点。

4. 总结

        OCSVM的关键在于如何选择合适的超平面,以使得正常数据被尽可能包围,而异常数据则被远离。这是通过优化一个目标函数来实现的,其中包括最小化超平面到最近正常数据点的距离和最大化超平面与正常数据之间的间隔。

3. 应用场景

        在异常检测领域有广泛的应用:

1. 网络安全

        检测网络中的异常行为,如入侵检测。它可以识别与正常网络流量不同的异常流量模式,从而提高网络安全性。

2. 金融欺诈检测

        检测信用卡欺诈、异常交易和洗钱行为。它可以识别与正常交易模式不符的异常交易。

3. 工业制造

        监测工业制造中的设备异常和故障。它可以帮助预测设备可能出现的问题,从而减少停机时间和维修成本。

4. 医疗诊断

        检测医疗图像中的异常,如肿瘤、病变和异常组织。它有助于提高医学诊断的准确性。

4. 异常检测实践

        sklearn提供了一些ML方法,其中OCSVM可以用于Novelty Dection(奇异点检测);IF(Isolation Forest),LOF(Local Outlier Factor)可用于Outlier Detection(异常点检测)。

4.1 API简介

1. 构造函数

oneClassSvm(cacheSize = 100, kernel = rbfKernel(), epsilon = 0.001,
    nu = 0.1, shrink = TRUE, ...)

(1)kernel用于计算样本之间相似度的核函数

1. 径向基础函数内核rbfKernel();

2. 线性内核linearKernel();

3. 多项式内核polynomialKernel();

4. Sigmoid 内核sigmoidKernel()

(2)nu限制了在模型中允许存在的异常点的比例,默认值为 0.1。其值必须介于 0 和 1 之间,通常介于 0.1 和 0.5 之间。

(3)epsilon:优化器收敛的阈值,默认值为 0.001。 如果迭代间的改进小于阈值,则算法将停止并返回当前模型。

(4)cacheSize:存储训练数据的缓存的最大大小, 默认值为 100 MB。

(5)shrink:默认值是 TRUE,表示使用缩减启发式。 在这种情况下,某些样本将在训练过程中“缩减”,这可能会加快训练速度 。

2. 其他

(1)fit(X):训练,根据训练样本和上面两个参数探测边界;(注意是无监督)

(2)predict(X):返回预测值(+1:正常样本,-1:异常样本);

(3)fit_predict(X[, y]):在X上执行拟合并返回X的标签;

(4)decision_function(X):返回各样本点到超平面的函数距离(signed distance),正的为正常样本,负的为异常样本。

(5)set_params(**params):设置评估器的参数;

(6)get_params([deep]):获取评估器的参数。

4.2 demo

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm

rng = np.random.RandomState(42)
X = 0.3 * rng.randn(200, 2)  # 正常样本
X_train = np.r_[X + 2, X - 2]
X_test = np.r_[rng.uniform(low=-6, high=6, size=(50, 2))]  # 异常样本

model = svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
model.fit(X_train)
y_pred_train = model.predict(X_train)
y_pred_test = model.predict(X_test)
# n_error_train = y_pred_train[y_pred_train == -1].size  # 训练集异常样本个数

# 绘制训练样本和测试样本的散点图
plt.scatter(X_train[:, 0], X_train[:, 1], color='black', label='train_sample')
plt.scatter(X_test[:, 0], X_test[:, 1], color='red', label='test_sample')

# 绘制异常样本的边界
xmin, xmax = X_test[:, 0].min() - 1, X_test[:, 0].max() + 1
ymin, ymax = X_test[:, 1].min() - 1, X_test[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(xmin, xmax, 500), np.linspace(ymin, ymax, 500))
Z = model.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, levels=[0], linewidths=2, colors='blue')

# 设置图形标题和图例
plt.title("OneClassSVM")
plt.legend()
plt.show()

模型将正常样本点标记为1,异常样本点标记为-1,并将它们可视化出来。

5. 优缺点

5.1 优点

    1. 不需要异常数据进行训练,只需要正常数据即可;
    2. 对于高维数据和复杂的数据分布具有较好的适应性;
    3. 可以通过调整模型参数来控制异常点的检测灵敏度。

5.2 缺点

    1. 在处理高维数据和大规模数据时,计算复杂度较高;
    2. 对于数据分布不均匀或存在噪声的情况,效果可能不理想;
    3. 需要谨慎选择模型参数,以避免过拟合或欠拟合的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/548422.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Gin框架小结

Gin 简介 Gin是一个轻量级的Web框架,用于构建高性能的Go语言Web应用程序。提供了路由管理、中间件支持、参数绑定和验证、错误处理、静态文件服务等功能。 Gin框架解决了什么问题和痛点 1.golang http 标准库本身提供了比较简单的路由注册能力,只支持…

企业内部知识库:帮助你提高工作效率的好帮手

在现代企业中,知识和信息是一种无形资产,对企业的成长至关重要。员工之间有效地共享知识,可以大幅提高工作效率和团队的整体执行力。为了实现这一点,越来越多的企业开始构建自己的内部知识库,为员工提供一个集中的信息…

华为服务Fellow、首席项目管理专家,华为H5M项目管理标准制定主导者孙虎受邀为PMO大会演讲嘉宾

全国PMO专业人士年度盛会 华为服务Fellow、首席项目管理专家,华为H5M项目管理标准制定主导者孙虎先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“落地项目管理标准,打赢班长的战争”。大会将于5月25-26日在北京举办&am…

液晶触摸屏中应用的电容式触摸芯片

随着多媒体信息查询的与日俱增,人们越来越多地谈到触摸屏,因为触摸屏不仅适用于中国多媒体信息查询的国情,而且触摸屏具有坚固耐用、反应速度快、节省空间、易于交流等许多优点。利用这种技术,用户只要用手指轻轻地碰计算机显示屏…

PCL 高斯滤波(C++详细过程版)

目录 一、概述二、代码实现三、结果展示1、滤波前2、滤波后3、对比PCL 高斯滤波(C++详细过程版)由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 高斯滤波在PCL里有现成的调用函数,具体算法原理和实现代码见:

(八)C++自制植物大战僵尸游戏植物基类讲解

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 在植物大战僵尸游戏中,最重要的两个类别就是植物与僵尸。植物可以对僵尸进行攻击,不同的植物攻击方式千差万别,但是不同植物又有许多相同的属性。在基类(父类&#xf…

temux安装debian自用记录

http://ip:9001/ user/123 http://ip:5705/index admin/drpy 一、安装Ubuntu1804 1.首先安装termux.app 2.启动该app,输入命令 curl -Lo l l.tmoe.me; sh l 3.运行过程中连续选“Y”&…

面向对象设计模式之概念

一、面向对象设计模式 按目的分为创建型(creational)、结构型(structural)和行为型(behavioural);按范围分为类模式和对象模式。 二、设计原则 两大基础设计原则 程序设计的原则:模…

electron项目打包慢、打包报错

项目使用了electron框架,在第一次打包或者网络条件不好的环境下进行打包时熟速度慢的出奇,甚至经常出现打包失败的情况(如上面图片的报错)。 这是因为,在electron打包的过程中,需要去官方源https://github.…

安卓手机怎么连接电脑?这三个方法即刻解决!

随着智能手机的普及,我们越来越依赖手机进行工作和娱乐。然而,有时候我们需要将手机上的数据或文件传输到电脑上,或者需要在电脑上进行某些操作。那么,安卓手机怎么连接电脑呢?这篇文章将为你介绍三种简单的方法&#…

车载摄像头画质增强解决方案,赋能智能驾驶新时代

在智能化浪潮席卷汽车产业的今天,车载摄像头作为智能驾驶的“眼睛”,其画质清晰度直接关系到车辆感知环境的准确性和驾驶的安全性。然而,面对复杂多变的行车环境,如何确保车载摄像头在不同场景下都能呈现出高质量的图像&#xff0…

OpenHarmony轻量系统开发【1】初始OpenHarmony

1.1系统类型 OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互…

mac使用docker部署confluence

第一步拉镜像 选择7.13.6 点击pull 在镜像出 创建容器 并配置映射 需要等待一会 浏览器访问 confluence 服务 http://localhost:8090/ 语言选择中文 复制服务器ID 然后停止docker 容器 BBN3-O8RH-XJPI-GYAA 复制docker中confluence的系统文件 进入Files 考文件 文件目录…

基于springboot实现在线考试系统设计【项目源码+论文说明】

基于springboot实现在线考试管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于JavaWeb技术的在线考试系统设计与实现的开发全过程。通过分析基于Java Web技术的在线考试系统设计与实现管理的不…

vue给页面添加水印

vue给页面添加水印 <template><div class"home"><router-view /></div> </template><script>export default {components: {},data() {return {}},computed: {},mounted() {// 获取需要观察的节点const target document.queryS…

【DM8】ET SQL性能分析工具

通过统计SQL每个操作符的时间花费&#xff0c;从而定位到有性能问题的操作&#xff0c;指导用户去优化。 开启ET工具 INI参数&#xff1a; ENABLE_MONITOR1 MONITOR_SQL_EXEC1 查看参数 select * FROM v$dm_ini WHERE PARA_NAMEMONITOR_SQL_EXEC;SELECT * FROM v$dm_ini WH…

sky08、09笔记常用组合逻辑电路

本节的目的是为了更好的预估delay。 1.1bit全加器 module fadd_1b( a, b, cin, s, cout ); input wire a,b,cin; output wire s,cout;wire p,g; assign p a|b;//propagate carry assign g a&b;//generate carry assign s a^b^cin; assign cout (p&cin)|g; endmodu…

c++的学习之路:19、模板

摘要 本章主要是说了一些模板&#xff0c;如非类型模板参数、类模板的特化等等&#xff0c;文章末附上测试代码与导图 目录 摘要 一、非类型模板参数 二、类模板的特化 1、概念 2、函数模板特化 3、类模板特化 三、模板的分离编译 1、什么是分离编译 2、模板的分离编…

一次网卡驱动BUG故障的排错历程

前言 在日常运维中&#xff0c;总会遇到一些棘手的故障或问题&#xff0c;尤其面临多系统融合的兼容性或一些融合节点可能存在未知bug等方面&#xff0c;排错难度都会增加。 本文将从一次小事件为入口进行延伸&#xff0c;将宿主机esxi基础系统的多融合节点故障的排错历程展开…

分布式监控平台---Zabbix

一、Zabbix概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态。 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 通过一个友好的界面进行浏览整个…