当前位置: 首页 > news >正文

【算法】一类支持向量机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个示例,有需要可以直接下载使用。

相关文章:

  • prometheus 原理(架构,promql表达式,描点原理)
  • Android耗电分析之Battery Historian工具使用
  • mysql中insert … select锁范围
  • 如何解决由触发器导致 MySQL 内存溢出?
  • 在文件夹下快速创建vue项目搭建vue框架详细步骤
  • uniapp swiper设置高度以及切换时滚动条回到顶部,下滑加载
  • 如何解决浏览器兼容问题2.0
  • 搜狐新闻Hybrid AI引擎端侧离线大语言模型探索
  • 数据结构小记【Python/C++版】——散列表篇
  • 《Ubuntu20.04环境下的ROS进阶学习0》
  • ​如何防止网络攻击?
  • Java中 图的基础知识介绍
  • 【 React 】对React中类组件和函数组件的理解?有什么区别?
  • 【Linux】文件系统和软硬链接
  • EPDM和钉钉集成审批工作—移动端直接处理审批节点,高效协同!
  • Android Volley源码解析
  • Java到底能干嘛?
  • JS实现简单的MVC模式开发小游戏
  • JS题目及答案整理
  • JS专题之继承
  • Lsb图片隐写
  • PV统计优化设计
  • windows-nginx-https-本地配置
  • 闭包--闭包作用之保存(一)
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • (C#)获取字符编码的类
  • (二)hibernate配置管理
  • (二)换源+apt-get基础配置+搜狗拼音
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(下)
  • (四) Graphivz 颜色选择
  • (转)Mysql的优化设置
  • .net 4.0发布后不能正常显示图片问题
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 服务 ServiceController
  • .net 获取url的方法
  • .net 生成二级域名
  • /etc/fstab 只读无法修改的解决办法
  • /var/spool/postfix/maildrop 下有大量文件
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [.net]官方水晶报表的使用以演示下载
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C\C++]读入优化【技巧】
  • [C++]命名空间等——喵喵要吃C嘎嘎
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [Hive] CTE 通用表达式 WITH关键字
  • [HTML]Web前端开发技术6(HTML5、CSS3、JavaScript )DIV与SPAN,盒模型,Overflow——喵喵画网页
  • [LeetCode]—Permutations 求全排列
  • [OpenAI]继ChatGPT后发布的Sora模型原理与体验通道