SVM单类异常值检测

SVM是一种广泛使用的分类器,通常用于二分类或多分类问题。然而,在异常点检测的场景中,我们通常会将数据视为一个类别(即正常数据点),并尝试找到那些与正常数据点显著不同的点(即异常点)。这可以通过One-Class SVM(单类支持向量机)来实现。
SVM单类异常值检测代码获取戳此处代码获取戳此处

One-Class SVM的原理是寻找一个超平面,使得正常数据点尽可能地分布在这个超平面的一侧,同时使得超平面与原点(或指定的其他点)之间的距离最大化。这样,那些位于超平面另一侧或远离超平面的点就可以被视为异常点。

具体来说,One-Class SVM会学习一个决策函数,该函数将正常数据点的特征空间映射到一个高维空间中,并在这个高维空间中寻找一个最优超平面。这个超平面会尽可能地将正常数据点与原点分开,同时使得超平面与原点之间的距离最大化。在训练过程中,One-Class SVM会利用核函数(如RBF核、线性核等)将数据映射到高维空间,并在这个空间中寻找最优超平面。

实现步骤

  1. 数据准备:首先,收集并整理好一定量的数据样本,包括各个特征的变量数据。这些数据应该主要是正常数据点,因为我们的目标是找出与这些正常数据点显著不同的异常点。
  2. 数据预处理:对数据进行必要的预处理,如标准化、归一化、降维等。这些步骤可以帮助提高SVM模型的性能,并减少过拟合的风险。
  3. 选择核函数:根据数据的特点和问题的需求,选择一个合适的核函数。常用的核函数包括RBF核、线性核、多项式核等。不同的核函数适用于不同类型的数据和问题。
  4. 训练One-Class SVM模型:使用训练数据来训练One-Class SVM模型。在训练过程中,模型会学习一个决策函数,该函数将正常数据点的特征空间映射到一个高维空间中,并在这个高维空间中寻找一个最优超平面。
  5. 异常检测:将测试数据输入到训练好的One-Class SVM模型中,得到每个测试数据点的决策函数值。根据这些值的大小,可以判断哪些数据点是异常点。通常,那些决策函数值较小的数据点被认为是异常点。

部分代码

复制代码
%% 导入数据
load('matlab.mat');
X = res(:,1:6); % 特征数据
n = size(X, 1);

%% 划分训练集和测试集
rng(1); % 设置随机数种子,以确保结果可重现
train_ratio = 1; % 训练集占比
idx = randperm(n);
X_train = X(idx(1:round(train_ratio*n)), :);

%% 数据归一化
[~,ps] = mapminmax(X_train', 0, 1); % 对训练数据进行归一化
X_train_normalized = mapminmax('apply', X_train', ps)'; % 归一化训练数据

%% 创建模型
nu = 0.05; % 设置 OCSVM 参数 nu

效果图

相关推荐
众人皆醒我独醉1 小时前
Triton Inference Server:NVIDIA 的推理"瑞士军刀"——LLM 只是它的一种负载
人工智能·面试·ai编程
Vince的修炼之路1 小时前
大模型推理框架SGLang的源码分析
人工智能·架构
码途潇潇1 小时前
Codex Rules 与 Skills:项目级和全局级配置一览
人工智能
饼干哥哥2 小时前
字节Seedance2.5终于上线,这次在收割谁?
人工智能·设计模式·前端框架
Jerry2 小时前
LeetCode 108. 将有序数组转换为二叉搜索树
算法
小程故事多_802 小时前
Claude Code与Codex六大组件拆解,Coding Agent怎么把任务做稳
人工智能
董员外2 小时前
RAG 系统进化论(六):GraphRAG(基于知识图谱的 RAG),从相似文本走向实体关系
人工智能·后端·设计模式
蓝斯4972 小时前
Diff算法的简单介绍
算法
过期的秋刀鱼!2 小时前
L2正则化,防止过拟合-历史补充
算法·过拟合·l2正则化
Summer-Bright2 小时前
AI 软件简报 07.29-08.02:OpenAI 降价 80%、DeepSeek 全开源、欧盟动刀
人工智能·ai·开源·ai软件