【算法】一类支持向量机OC-SVM
【算法】一类支持向量机OC-SVM
- 前言
- 一类支持向量机OC-SVM 概念介绍
- 示例编写
- 数据集创建
- 实现一类支持向量机OC-SVM
- 完整的示例输出
前言
由于之前毕设期间主要的工具就是支持向量机,从基础的回归和分类到后来的优化,在接触到支持向量机还有一类支持向量机的,对其产生了一定的兴趣,并对研究过程中的相关示例进行记录,主要是基础的一类支持向量机OC-SVM示例和蜂群算法优化一类支持向量机超参数示例,方便后续的查看。
一类支持向量机OC-SVM 概念介绍
OC-SVM(One-Class Support Vector Machine)是一种支持向量机(Support Vector Machine,SVM)的变体,用于异常检测和异常检测问题。与传统的SVM只能处理二分类问题不同,OC-SVM旨在通过仅使用正例样本来学习一个描述正例样本特征的超平面,并尽可能将负例样本远离该超平面。
在OC-SVM中,训练样本仅包含正例样本,目标是找到一个最优的超平面,使得正例样本尽可能地位于该超平面上方,并使负例样本尽可能地位于该超平面下方。这样,当新的样本点被映射到特征空间时,可以根据其相对于超平面的位置进行分类,从而判断其是否为异常样本。
该介绍不那么通俗易懂,看了一篇文章,简单的说,以前的svm 分类有明细的划分,现在的oc-svm则只有一个类别的划分,也就是正例,至于其他的都归属于负例。这个在大神的知乎文章什么是一类支持向量机(one class SVM),是指分两类的支持向量机吗?中有通俗的例子讲解,这边不进行重复论述。
示例编写
主要是基于vscode 编译器展开python的编写,只需要在扩展中下载Python 插件即可。
数据集创建
数据集包括测试与训练集,由于一类支持向量机OC-SVM在示例中只要采用python 中的OneClassSVM
,而它返回的预测标签如果 正常数据点返回 1,异常点返回 -1 ,因此在数据集的标签要做相应的处理,正例为1,负例为-1。
# 假设 X 是训练数据,它应该是一个形状为 (n_samples, n_features) 的二维数组
# 这里我们创建一个简单的示例数据集
X = np.random.normal(size=(100, 2))
binary_array = np.random.randint(2, size=100)
binary_array=np.where(binary_array == 0, -1, 1)
# 预测
# 使用训练好的模型预测新数据点的标签,正常数据点返回 1,异常点返回 -1
X_test = np.random.normal(size=(10, 2))
实现一类支持向量机OC-SVM
主要采用OneClassSVM
,也是sklearn库里面的,pip 一下就行。使用起来跟svm 基本一样。
# 创建一个 OneClassSVM 对象
# 通过 'nu' 参数来控制错误率的上界和支持向量的比例
# 'kernel' 参数可以选择核函数,例如 'rbf' 代表径向基函数核
# 'gamma' 是 'rbf', 'poly' 和 'sigmoid' 核函数的系数
ocsvm = svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
- ‘nu’ 参数来控制错误率的上界和支持向量的比例
- ‘kernel’ 参数可以选择核函数,例如 ‘rbf’ 代表径向基函数核
- ‘gamma’ 是 ‘rbf’, ‘poly’ 和 ‘sigmoid’ 核函数的系数
- ‘shrinking’ 参数如果设为 True,则会使用启发式收缩
- ‘tol’ 是停止训练的误差值大小
- ‘cache_size’ 是指定训练时使用的缓存大小
- ‘verbose’ 是控制日志输出的数量
这个可以直接看源码的注释,里面都有介绍。
完整的示例输出
# demo
from sklearn import svm
import numpy as np# 假设 X 是训练数据,它应该是一个形状为 (n_samples, n_features) 的二维数组
# 这里我们创建一个简单的示例数据集
X = np.random.normal(size=(100, 2))
binary_array = np.random.randint(2, size=100)
binary_array=np.where(binary_array == 0, -1, 1)
print(binary_array)# 创建一个 OneClassSVM 对象
# 通过 'nu' 参数来控制错误率的上界和支持向量的比例
# 'kernel' 参数可以选择核函数,例如 'rbf' 代表径向基函数核
# 'gamma' 是 'rbf', 'poly' 和 'sigmoid' 核函数的系数
ocsvm = svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)# 训练模型
ocsvm.fit(X,binary_array)# 预测
# 使用训练好的模型预测新数据点的标签,正常数据点返回 1,异常点返回 -1
X_test = np.random.normal(size=(10, 2))
# print(X_test)
print("--------------")
predictions = ocsvm.predict(X_test)# 输出预测结果
print(predictions)
print("--------------")
# 也可以使用 decision_function 方法来获取每个样本到决策边界的距离
# 负数通常表示异常值
distances = ocsvm.decision_function(X_test)
print(distances)
从输出的结果来看,有2组示例预测为负例,然后可以通过与真实标签比较,调整超参数来提交预测的精度。也可以嵌入寻优方法,这个在往期博文都有介绍,比如ga、pso等等。
在资源中上传了用蜂群算法优化一类支持向量机超参数的2个示例,有需要可以直接下载使用。
相关文章:

【算法】一类支持向量机OC-SVM
【算法】一类支持向量机OC-SVM 前言一类支持向量机OC-SVM 概念介绍示例编写数据集创建实现一类支持向量机OC-SVM完整的示例输出 前言 由于之前毕设期间主要的工具就是支持向量机,从基础的回归和分类到后来的优化,在接触到支持向量机还有一类支持向量机的…...

深入学习默认成员函数——c++指南
前言:类和对象是面向对象语言的重要概念。 c身为一门既面向过程,又面向对象的语言。 想要学习c, 首先同样要先了解类和对象。 本节就类和对象的几种构造函数相关内容进行深入的解析。 目录 类和对象的基本概念 封装 类域和类体 访问限定符…...

psutil, 一个超级有用的Python库
Python的psutil是一个跨平台的库,可以用于获取系统运行时的各种信息,包括CPU使用率、内存使用情况、磁盘和网络信息等。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、…...
[Python]`threading.local`创建线程本地数据
在Python中,threading.local是一个用于创建线程本地数据的工具。它允许每个线程拥有自己独立的变量副本,这样可以在多线程程序中避免共享变量带来的问题。 通过使用threading.local,你可以为每个线程创建一个独立的变量空间,这样…...

删除数据表
oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 删除数据表属于数据库对象的操作 drop table 表名称; 删除 emp30 表 SQL> drop table emp30;表已删除。 上面这个语句运行后,就会把数据表 emp30 删除 在…...
前端自带的base64转化方法
前端html的base64使用方法window.btoa()和window.atob()_html用window.btoa();-CSDN博客...

图论(二)之最短路问题
最短路 Dijkstra求最短路 文章目录 最短路Dijkstra求最短路栗题思想题目代码代码如下bellman-ford算法分析只能用bellman-ford来解决的题型题目完整代码 spfa求最短路spfa 算法思路明确一下松弛的概念。spfa算法文字说明:spfa 图解: 题目完整代码总结ti…...
.NET Core 日志记录功能详解
在软件开发和运维过程中,日志记录是一个非常重要的功能。它可以帮助开发者跟踪应用程序的运行状况、诊断和监控问题。.NET Core 提供了一个灵活且易于使用的日志系统,本文将详细介绍.NET Core日志的相关概念、配置和使用方法。 1. 什么是日志记录以及它…...

docker——启动各种服务
1.Mysql 2.Redis 3.nginx 4.ES 注意:ES7之后环境为 -e ELASTICSEARCH_HOSTS http://ip地址:9200...

git远程仓库使用
赋值这个地址clone 克隆之后 cd slam_oncloud/ git remote add chenxnew ssh://git192.168.3.40:1022/chenxiao/slam_oncloud.git 查看一下 linuxchenxiao:/media/linux/mydisk/cloud_slam/slam_oncloud$ git remote add chenxnew ssh://git192.168.3.40:1022/chenxiao/sla…...

js导出的excel文件无法打开/打开乱码,excel无法打开xxx.xlsx因为文件格式或文件扩展无效
excel无法打开xxx.xlsx因为文件格式或文件扩展无效 使用 a 标签导出这里就不细说了,直接说上述问题解决方案 在调用导出接口的时候加上两个参数 responseType: “blob” responseEncoding: “utf8” export function test(data) {return util({url: /test,method: …...
透明多级分流系统(用户端缓存和负载均衡)
部件考虑 有些设备位于客户端或者网络边缘,能够迅速响应用户请求,避免给cpu和数据库带来压力,比如,本地缓存,内容分发网络,反向代理等。 有些设备处理能力能够线性扩展,易于伸缩,应…...
Python sort从大到小排序面试题
在Python中,你可以使用内置的sorted()函数或者列表的sort()方法来对列表中的元素进行从大到小的排序。 使用sorted()函数: numbers [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] sorted_numbers sorted(numbers, reverseTrue) # 设置reverseTrue实现从大到小排…...
【Stable Diffusion】入门:AI绘画提示词+参数设置攻略
目录 1 提示词1.1 分类和书写方式1.1.1 内容型提示词1.1.2 标准化提示词1.1.3 通用模板 1.2 权重1.2.1 套括号1.2.2 数字权重1.2.3 进阶语法 1.3 负面提示词 2 参数详解2.1 Sampling steps2.2 Sampling method2.3 Width, Height2.4 CFG Scale2.5 Seed2.6 Batch count, Batch si…...
Qt使用Q_DECLARE_INTERFACE Q_INTERFACES宏实现接口类使用qobject_cast进行类型转换
在写抽象类或者接口的时候,肯定是不能继承QObject的 但是又想使用qobject_cast进行类型转换,使用以下办法就能实现 #ifndef FACTORYINTERFACE_H__ #define FACTORYINTERFACE_H__ #include <QObject> class FactoryInterface{ public:FactoryInterf…...

docker离线搭建仓库
要在Docker中搭建本地仓库,可以按照以下步骤进行操作: 首先安装 Docker。根据不同的操作系统选择合适的版本并完成安装过程。打开命令行工具(如Terminal或PowerShell),运行以下命令来创建一个新的容器并将其设置为本地…...
ABC344 A-E题解
文章目录 A题目AC Code: B题目AC Code: C题目AC Code: D题目AC Code: E题目AC Code: 不易不难,写到5题很简单,但是要有足够的思维能力。 A 题目 我们用一个 flag 变量记录我们是不是在两个竖…...
Jeecg-boot 初次启动项目失败
1.将IDEA的字符编码全部改成utf-8 2. 更改database的密码 3.换个jdk重新启动...

封装的echarts子组件使用watch监听option失效的问题
项目场景: 我在项目里面封装了一个echarts组件,组件接收一个来自外部的option,然后我用了一个watch函数去监听这个option的变化,option变化之后,销毁,然后再新建一个charts表 碎碎念 问题如标题所示,这篇…...

爬虫入门到精通_框架篇14(PySpider架构概述及用法详解)
官方文档 Sample Code: from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config {}# minutes24 * 60:每隔一天重新爬取every(minutes24 * 60)def on_start(self):self.crawl(http://scrapy.org/, callbackself.index_page)…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...