【算法】一类支持向量机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)…...
AI智能体到底强在哪?为什么大家开始从“养龙虾”转向“养马”
那么AI智能体的核心能力是什么? 1、理解需求 它能分析你的真实意图,而不是只看表面的文字,比如让它整理这个月的消费情况,它明白之后,会读取账单,做分类统计,生成总结,最后输出图表。…...
告别网盘客户端!用Alist+RaiDrive把百度云盘变成电脑本地文件夹(保姆级图文教程)
用AlistRaiDrive实现网盘本地化管理的终极方案 你是否厌倦了电脑上安装多个网盘客户端,不仅占用系统资源,操作还繁琐割裂?每次上传下载文件都要在不同客户端间切换,效率低下。现在,通过Alist和RaiDrive的组合…...
别再手动点菜单了!用这招让Cadence Virtuoso Schematic效率翻倍(附Net高亮快捷键配置)
电路设计效率革命:Cadence Virtuoso Schematic高阶快捷键配置指南 在集成电路设计的浩瀚宇宙中,Cadence Virtuoso如同设计师手中的光刻机,每一次精准操作都直接影响最终芯片的性能与可靠性。然而,当面对数百个晶体管组成的复杂模…...
Python开发者首次使用Taotoken接入大模型API的完整步骤指南
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Python开发者首次使用Taotoken接入大模型API的完整步骤指南 对于Python开发者而言,接入大模型API进行应用开发已成为一…...
【紧急预警】Lindy衰减临界点已提前至第8.3个月!2024最新《营销自动化寿命健康度白皮书》限时开放前500份
更多请点击: https://kaifayun.com 第一章:Lindy衰减临界点的理论重构与实证突破 Lindy效应传统上描述“越老越长寿”的非线性生存规律,但其在现代软件系统、开源生态与协议层技术栈中的适用边界正遭遇结构性挑战。本文首次将Lindy模型从静…...
为什么鸿蒙 App 最终都会走向状态驱动?
子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...
Gazebo Sim多旋翼控制:四轴飞行器动力学建模与PID调参
Gazebo Sim多旋翼控制:四轴飞行器动力学建模与PID调参 【免费下载链接】gz-sim Open source robotics simulator. The latest version of Gazebo. 项目地址: https://gitcode.com/gh_mirrors/gz/gz-sim Gazebo Sim是一款功能强大的开源机器人模拟器ÿ…...
3分钟快速安装BetterNCM插件管理器,让你的网易云音乐功能翻倍
3分钟快速安装BetterNCM插件管理器,让你的网易云音乐功能翻倍 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼吗?想要解锁更多个…...
终极歌词同步神器LRCGET:5分钟为你的音乐库添加完美歌词
终极歌词同步神器LRCGET:5分钟为你的音乐库添加完美歌词 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否厌倦了在听歌时手动搜索歌词…...
OpenRASP原理与实战:Java应用层实时防护技术详解
1. 为什么我宁愿花三天部署OpenRASP,也不愿再写第五个自定义WAF过滤器去年冬天,我在给一家做在线教育SaaS平台做安全加固时,连续踩了三个坑:第一次用NginxLua写了套SQL注入规则,结果学生提交的“SELECT * FROM courses…...
