【算法】一类支持向量机OC-SVM

news2024/7/6 20:44:03

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

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

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

相关文章

可免费使用的AI平台汇总 + 常用赋能科研的AI工具推荐

赋能科研,AI工具助你飞跃学术巅峰!(推荐收藏) 文章目录 赋能科研,AI工具助你飞跃学术巅峰!(推荐收藏)一、可免费使用的AI平台汇总1. ChatGPT2. New Bing3. Slack4. POE5. Vercel6. 其他平台7. 特定功能平台8. 学术资源平台9. 中文…

Linux学习——线程的控制

目录 ​编辑 一,线程的创建 二,线程的退出 1,在子线程内return 2,使用pthread_exit(void*) 三,线程等待 四,线程获取自己的id值 五,线程取消 六,线程分离 一,线程的创建 在对…

MySQL常见的索引类型介绍

我将为您详细讲解 MySQL 中常见的索引类型,以及它们的使用场景、特点、区别和优势。索引是提高数据库查询性能的关键工具,它可以加速数据检索速度,减少服务器的负担。在 MySQL 中,索引类型主要包括 B-Tree 索引、哈希索引、全文索…

025—pandas 根多列判断不在其他列的数据

思路 是有两个相同结构的数据表,已知第二个表是第一个表的部分数据,需要以其中两列为单位,判断在第一个表中存在,在另外一个表中不存在的数据。 思路: 我们先将 df1 和 df2 的 x、y 列取出,组合为元组形成…

深入探索HAProxy:高性能负载均衡器的奥秘

目录 引言 一、HAProxy基础知识 (一)HAProxy概述 (二)核心特性 (三)支持调度算法 二、安装haproxy (一)下载源码包 (二)解决依赖环境 (三…

教你实现微信公众号消息每日自动推送-俘获妹子芳心

教你实现微信公众号消息每日自动推送-俘获妹子芳心,我们使用的是github的这个库。链接:https://github.com/limoest/daily_reminder 。作者的仓库已经有足够详细的教程。本文主要描述搭我自己的建过程,帮助更多小白一步一步搭建实现~ 首先要fork该项目 申请微信接口公众测试…

高端竞赛活动,财会知识竞赛复赛方案

复赛环节共计有48名选手参与,随机分为2组,每组24名选手,经过与预赛环节相同的关卡及赛制,即每组选手皆通过两轮关卡赛一轮复活赛,每组角逐12名选手晋级。2组共计24名选手晋级决赛,而未进入决赛的选手则获得…

分享软件项目实施方案模板

本项目在实施过程中将遵守做到以下几个方面: 与建设单位共同完成整个系统软件、网络等设计,负责系统的开发、测试、调试、人员培训、系统的试运行和交付,并保证系统质量。负责系统的维护、应用软件的升级和更新。提出对系统硬件设备的相关技术要求。在项…

redis源码分析

是什么 是基于内存(而不是磁盘)的kv(而不是关系型mysql那种)数据库,通过空间换时间 源码分析 跳表skiplist 假设你有个有序链表,你想看某个特定的值是否出现在这个链表中,那你是不是只能遍历一次链表才能知道,时间复杂度为O(n…

JavaEE--SpringBoot配置⽂件

配置文件的基本概念 properties的语法格式 读取配置文件的内容 properties的缺点 yml 主要使用yml yml的文件格式 先举一个例子,简单了解一下 验证结果如下: yml读取配置文件的内容 配置文件内容为空的时候的情况 配置内容为null时的情况 配置…

算法项目(7)—— 文本检索图片

本文包含什么? 免环境配置,实现文本搜索图片全套代码以及代码介绍运行有问题? csdn上后台随时售后.项目说明 本文主要实现用文本搜索数据库中图片的功能. 项目运行 代码地址在文末 点击链接后选择T4的GPU: 将云盘中的代码文件clip_search.tar拖到下图位置上传代码: 执行…

OD_2024_C卷_200分_9、园区参观路径【JAVA】【动态规划】

package odjava;import java.util.Scanner;public class 九_园区参观路径 {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt(); // 长 -> 行数int m sc.nextInt(); // 宽 -> 列数int[][] matrix new int[n][m]; // 地图…

RK3568 xhci主控挂死问题

串口日志 rootjenet:~# [18694.115430] xhci-hcd xhci-hcd.1.auto: xHCI host not responding to stop endpoint command. [18694.125667] xhci-hcd xhci-hcd.1.auto: xHCI host controller not responding, assume dead [18694.125977] xhci-hcd xhci-hcd.1.auto: HC died; c…

SQLiteC/C++接口简介

上一篇:SQLite——世界上部署最广泛的开源数据库(简介) 引言: 作为一种轻量级、嵌入式关系型数据库,SQLite已经成为许多应用和系统的首选解决方案。它是一个开源软件库,以小型、快速和易于使用而著称。为…

利用yaml文件部署NacosXxl-job到阿里云的ACK

背景介绍 随着容器化的技术成熟落地,拥抱各种成熟的容器化集群平台是加速我们落地的必然之路,目前国内以阿里云、华为云、腾讯云为平台的供应商为主,国外则以AWS,Azure为主,让我们借助平台已有的优势进行快速落地提高…

zeta新增三个任务教程,即将刷新,速撸

这期是延续上期的教程,前面的任务不变,所以直接复制的前面的教程,多了三个任务更新在后面。 简单说一下,zeta是已经发币的公链项目,但是它社区还有6%的用户激励token份额没发完,做主网的几个简单任务可以获…

文本向量评测MTEB和C-MTEB

文章目录 简介MTEBC-MTEB参考资料 简介 MTEB(Massive Text Embedding Benchmark)是目前评测文本向量很重要的一个参考,其榜单也是各大文本向量模型用来展示与其他向量模型强弱的一个竞技台。 C-MTEB则是专门针对中文文本向量的评测基准。 MTEB MTEB的目的是为了…

基于51单片机超声波测距

目录 摘 要 2 ABSTRACT 3 目 录 4 1 绪论 1 1 概述 12 国内外发展现状 1 2 系统总体方案设计 21 设计要求 2 1)可进行距离测量。 2 2) 采用数码管显示距离数据。 2 3) 可按键设置距离门限值 2 4) 具有报警功能 22 方案选择 2 1 …

华为手机的备忘录怎么传到苹果15手机上?

曾经,我尝试过借助微信的复制粘贴功能,将备忘录内容一一传输。但这种方法既繁琐又容易出错,让我苦不堪言。我也曾试图通过数据线将数据导入电脑,再导入新手机。然而,这种方法不仅操作复杂,而且效率低下&…

脱围:使用 ref 保存值及操作DOM

♻️ 前面多篇文章中提及&#xff1a;state 可以 ① 保存渲染间的数据&#xff1b; ② state setter 函数更新变量会触发 React 重新渲染组件。 // 子组件&#xff1a;显示当前时间 function Time() {return (<p>{new Date().toLocaleString()}</p>) }export def…