SVDD 支持向量数据描述工具箱
项目介绍
本工具箱是专为 MATLAB 环境开发的 SVDD(Support Vector Data Description)算法实现。SVDD 是一种强大的单类分类(One-Class Classification)和异常检测算法,由 Tax 和 Duin 提出。其基本思想是在高维特征空间中寻找一个能够包含绝大多数目标样本的最小体积超球体。落在超球体内部的点被视为正常数据,而落在球体外部的点则被识别为异常值或离群点。
功能特性
- 经典算法实现:严格遵循 SVDD 理论框架,通过求解对偶二次规划问题确定最优边界。
- 多种核函数支持:内置线性核(Linear)、径向基核(RBF)、多项式核(Poly)及 Sigmoid 核,能够灵活处理线性不可分的复杂数据分布。
- 自动化支持向量识别:算法能够自动筛选出位于边界上及边界外的关键支持向量,并进行可视化标注。
- 可视化评估:集成了决策边界绘制功能,通过等高线直观展示数据的空间分布描述情况。
- 参数可调性:允许用户自定义惩罚系数 C(控制异常点比例)以及核函数相关参数。
系统要求
- 软件版本:MATLAB R2016b 及以上版本。
- 必要工具箱:需要安装 MATLAB Optimization Toolbox(优化工具箱),以使用
quadprog 函数进行二次规划求解。
---
算法实现逻辑与核心模块说明
#### 1. 数据预处理与参数配置
在运行过程中,系统首先生成二维模拟数据作为目标类。用户需要设置核心参数:
- kernel_type:决定了数据映射到高维空间的规则。
- C:惩罚参数,决定了模型对异常点的容忍度。该值越小,超球体边界越紧缩,被划分为离群点的样本越多。
#### 2. 模型训练模块 (svdd_train)
该模块实现了 SVDD 的核心优化逻辑。其主要步骤如下:
- 核矩阵计算:利用输入的训练样本计算核矩阵 K。
- 二次规划求解:将 SVDD 的对偶目标函数转化为 MATLAB 中
quadprog 函数的标准形式。目标函数旨在最小化超球体体积,同时满足所有 $alpha$ 复系数之和等于 1 且受限于惩罚系数 C 的约束。 - 支持向量提取:识别出 $alpha > 0$ 的样本点作为支持向量。其中 $0 < alpha < C$ 的样本点位于超球体的边界上,而 $alpha = C$ 的样本点通常位于边界之外。
- 半径计算:通过选取边界上的支持向量,计算其到球心的距离,由于边界点到球心的距离即为半径,系统据此确定超球体的半径平方 $R^2$。
#### 3. 预测与评分模块 (svdd_predict)
该模块用于计算待测样本点到模型训练出的超球体中心的距离:
- 距离计算公式:根据核函数性质,计算样本点在高维空间中与球心的欧氏距离。
- 评分标准:输出的是距离平方值。当距离平方小于或等于 $R^2$ 时,判定数据属于目标类;反之则判定为异常值。
#### 4. 核函数处理模块 (compute_kernel)
模块内部集成了四种数学计算方式:
- 线性核:执行数据的内积运算。
- RBF 核:通过计算样本间的欧氏距离平方并应用指数衰减,处理非线性边界。
- 多项式核:通过高次幂运算捕捉特征间的交互。
- Sigmoid 核:模拟神经网络中的激活函数映射。
---
关键实现细节分析
#### 决策边界的定义
工具箱通过生成一个覆盖数据区域的密集网格,利用 svdd_predict 计算网格中每个点到球心的距离,并寻找距离等于 $R^2$ 的点集。最终通过 contour 函数绘制出这条等高线,这便是 SVDD 在原始空间中的决策边界。
#### 惩罚系数 C 的物理意义
在代码实现中,参数 C 与样本量 n 和参数 $nu$ 密切相关。C 的存在使得模型能够忽略部分离群点,避免过拟合。代码通过设置相应的上下界约束 lb 和 ub 来实现这一逻辑。
#### 距离计算的技巧
由于球心在特征空间中是所有支持向量的线性组合,代码并未直接计算球心的显式坐标(这在高维空间通常不可行),而是通过核技巧,将距离计算转化为当前点与支持向量之间的核运算组合,从而大幅提升了计算效率并支持理论上的无限维映射。
#### 可视化标注
系统在图形输出中明确区分了四类对象:
- 目标类数据:蓝色的原始训练样本点。
- 决策边界:红色的闭合曲线,定义了正常数据的范围。
- 支持向量:绿色方块,突出显示了最终决定模型形状的关键样本。
- 测试离群点:红色叉号,用于验证模型对未知异常数据的识别能力。