One-Class SVM详解

news2024/11/24 16:12:49

简介

One-Class SVM(Support Vector Machine)是一种无监督学习算法,用于异常检测和离群点检测。它的目标是通过仅使用正常数据来建模,识别出与正常模式不同的异常数据点。

One-Class SVM的工作原理如下:

  1. 数据映射:将正常数据映射到高维特征空间中,使得正常数据点能够被一个超平面所包围。这个超平面被称为决策边界。
  2. 寻找最优超平面:通过最大化超平面与正常数据之间的间隔,寻找一个最优的分割超平面,使得异常点尽可能远离该超平面。这意味着决策边界要尽可能远离正常数据点。
  3. 异常检测:对于新的数据点,通过计算其与超平面的距离,来判断该数据点是否为异常。距离较大的数据点更有可能是异常点。

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

在One-Class SVM中,还有两个重要的参数需要设置:

  • nu参数控制了异常点的比例。它限制了在模型中允许存在的异常点的比例。较小的nu值表示更少的异常点,较大的nu值表示更多的异常点。
  • kernel参数定义了用于计算样本之间相似度的核函数,例如线性核、高斯核等。

优缺点

One-Class SVM的优点包括:

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

然而,One-Class SVM也有一些限制:

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

One-Class SVM广泛应用于异常检测、离群点检测、网络安全、图像处理等领域。它可以帮助识别潜在的异常情况,对于保护系统的安全和发现异常行为具有重要的作用。

代码示例

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

# 生成训练样本
rng = np.random.RandomState(42)
n_samples = 200
X = 0.3 * rng.randn(n_samples, 2)
X_train = np.r_[X + 2, X - 2]

# 训练OneClassSVM模型
clf = svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
clf.fit(X_train)

# 生成测试样本
X_test = np.r_[rng.uniform(low=-6, high=6, size=(50, 2))]

# 预测样本的异常情况
y_pred_train = clf.predict(X_train)
y_pred_test = clf.predict(X_test)
n_error_train = y_pred_train[y_pred_train == -1].size
n_error_test = y_pred_test[y_pred_test == -1].size
print(n_error_train)  # 打印出训练集中异常值的个数为40       40/400=0.1  对应nu参数
print(n_error_test)


# 绘制训练样本和测试样本的散点图
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 = clf.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()

在这里插入图片描述

该示例演示了如何使用OneClassSVM进行异常检测。首先,使用随机生成的数据生成训练样本X_train。然后,创建并训练OneClassSVM模型clf。接下来,生成测试样本X_test,并使用训练好的模型预测样本的异常情况。最后,通过绘制训练样本、测试样本和异常边界,展示了异常检测的结果。

请注意,示例中使用了rbf(径向基函数)作为核函数,nu=0.1表示异常点的比例约为10%。你可以根据具体问题和数据集调整这些参数来适应不同的场景。

One-Class SVM常见方法解释:

  • fit(X):训练,根据训练样本和上面两个参数探测边界。(注意是无监督)
  • predict(X):返回预测值,+1就是正常样本,-1就是异常样本。
  • decision_function(X):返回各样本点到超平面的函数距离(signed distance),正的维正常样本,负的为异常样本。
  • set_params(**params):设置这个评估器的参数,该方法适用于简单估计器以及嵌套对象(例如管道)
  • get_params([deep]):获取这个评估器的参数。
  • fit_predict(X[, y]):在X上执行拟合并返回X的标签,对于异常值,返回 -1 ,对于内点,返回1。

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

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

相关文章

潮玩盲盒APP系统开发

盲盒抽奖App软件界面应该包括以下几个部分: 首页:首页需要展示正在进行的抽奖活动、热门盲盒商品和刚刚开奖的中奖名单,让用户快速了解当前的热门活动和优惠。 抽奖详情页:抽奖详情页需要展示抽奖主题、奖品图片、中奖规则…

高频前端面试题汇总之计算机网络篇

一、HTTP协议 1. GET和POST的请求的区别 Post 和 Get 是 HTTP 请求的两种方法,其区别如下: 应用场景: GET 请求是一个幂等的请求,一般 Get 请求用于对服务器资源不会产生影响的场景,比如说请求一个网页的资源。而 P…

SAX解析XML返回对应格式的Map对象

前言 最近有一个解析大型xml的需求,xml大小7M,其中xml结构非常复杂,元素各种嵌套 不乏有元素下对象,元素下集合,集合下对象,集合下集合,兄弟节点,元素下对象下集合,同一元…

数字时代,你想成为一只“弱鸡”,还是一个“超级个体”?

电话延伸了人类的耳朵,屏幕延伸了人类的眼睛,汽车这样的交通工具延伸了人类的腿脚,人类的生存能力开始变得和技术相关,而这个趋势仍在加剧。 如今,Web3延伸了人的综合体验,AI延伸了人类的大脑,它…

MySQL(视图、存储过程与函数、流程控制、触发器)

第一章 视图 1 什么是视图 为了提高复杂的SQL语句的复用性和表的操作的安全性 ,MySQL数据库管理系统提高了视图特性,所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的列和行数据。但是视图并…

2023年前端面试汇总 - JavaScript

1. 数据类型 1.1. JavaScript有哪些数据类型,它们的区别? JavaScript共有八种数据类型,分别是 Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是ES6 中新增的数据类型: Symbol …

避开这12个压测误区保证有效压测

压测本质上其实就是经验的问题,至于技术我认为现在都是配套了,也有人配套的东西也搞不清,那还是经验的问题。提醒下,这篇对野路子玩压测的人蛮有用的。 一、压测的误区 首先讲压测误区,每个误区我会简单的总结下&…

作为超级自动化的重要先驱,流程挖掘正在成为组织运营标配

正在成为组织运营标配的流程挖掘,到底有哪些商业价值? 作为超级自动化的重要先驱,流程挖掘正在成为组织运营标配 文/王吉伟 AIGC正在影响越来越多的行业,流程挖掘领域亦不例外。 Mindzie首先宣布集成生成式AI,使用户…

带你详细了解Redis事务锁机制-加实列演示-上

Redis_事务_锁机制_秒杀 Redis 的事务是什么? 1、Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行 2、事务在执行的过程中,不会被其他客户端发送来的命令请求所打断 3、Redis 事务的主要作用就是串联多个命令防止别的命令…

怎么学习和提升前端开发的能力? - 易智编译EaseEditing

要学习和提升前端开发的能力,您可以按照以下步骤进行: 掌握基础知识: 了解HTML、CSS和JavaScript的基本概念和语法。学习HTML用于创建网页结构,CSS用于样式设计和布局,JavaScript用于交互和动态效果。 学习框架和库&…

探讨太阳能热水器的安全隐患和雷电防护措施

太阳能热水器是指利用太阳光加热原理来获得热水的装置。随着科学技术的发展,太阳能热水器因其新颖、环保、节能且方便而深受消费者的喜爱,安装数量逐年增加。我国太阳能资源丰富,尤其是在广袤的西部中小城镇、农村地区,家家户户几…

NSSA实验和配置命令

1)拓扑 需求 2)需求:PC2和PC5互通 配置思路和配置命令 3)配置思路: 第一步:先让R1能够和PC5互通,要先配置静态路由 [R1] ip route-static 192.168.4.0 24 192.168.18.8 第二步:在R8上写去往PC1/PC2的路…

定长图文验证码模型训练

文章目录 自定义数据集生成模型代码计算均值和标准差训练代码测试集成功率计算推理测试 市面上常见的验证码识别方案包括: 基于规则的方案:这种识别方案针对一些特定类型的验证码(如数字、字母组合),利用编写规则的方式…

逛开发者集市啦,ShardingSphere 在亚马逊云科技中国峰会等你!

2023亚马逊云科技中国峰会将于6月27日-28日在上海世博中心盛大开幕。本次峰会以“共见价值成就”为主题,与合作伙伴展望云计算趋势及合作发展战略,分享行业解决方案,共同探讨协同销售策略和全新的 APN 计划,助力合作伙伴成就更多价…

计算机系统层次结构与操作系统和驱动的定义

一、程序分类 程序按其运行环境分为: 裸机程序:直接运行在对应硬件上的程序 应用程序:只能运行在对应操作系统上的程序 二、计算机系统的层次结构 计算机系统两种层次结构: 2.1 无操作系统的简单的两层结构 2.2 有操作系统的…

华为云物联网平台微信小程序开发教程2.0【完整详细教程】

一、简介 在之前曾发布过一篇文章“华为云物联网平台的微信小程序开发”,在最近接到部分用户私信在使用开发过程中出现的问题,例如API访问的"401"现象等问题,在重新查看上面的文章教程时发现教程内容的步骤不详细,现对教…

Postman快速入门(一)

一、基本介绍 postman是一款流程的接口调试工具,其特点就是使用简单,功能强大。使用角色也非常广泛,后端开发,前端人员,测试人员都可以使用它进行接口调试或测试。 下图是基本功能介绍 发送第一个请求 如果你是第一次…

人工智能如何彻底改变 SaaS 格局

人工智能 (AI) 正在颠覆几乎所有行业,并正在改变我们开展业务的方式。近年来,SaaS 行业一直是受影响最大的行业之一,人工智能在其指数级增长中发挥着至关重要的作用。在本文中,我们将详细讨论实施 AI 对 SaaS 产品的增长和开发有何…

C++拷贝构造函数

文章目录 拷贝构造函数是一个c的默认成员函数,它是用来拷贝对象的,当你想修改对象,但是又不想修改它本身,那么可以将其拷贝给一个对象对这个拷贝出来的对象进行操作 拷贝构造函数语法:类名(const 类名&…

Java-API简析_java.util.StringTokenizer类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131293596 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…