前言
支持向量数据描述(Support Vector Data Description,SVDD)是一种单值分类算法,能够实现目标样本和非目标样本的区分,通常应用于异常检测和故障检测等领域。SVDD算法的具体描述可以参考以下文献:
(1)Tax D M J, Duin R P W. Support vector domain description[J]. Pattern recognition letters, 1999, 20(11-13): 1191-1199.
(2)Tax D M J, Duin R P W. Support vector data description[J]. Machine learning, 2004, 54(1): 45-66.
注:该文章侧重讲述的是SVDD的实现,具体求解过程可以参考上述参考文献,此处只列出核心的公式。
SVDD的原理
假设有一组正类训练数据 [公式] ,其中 [公式] 是样本个数, [公式] 是特征维度。首先通过非线性变换函数 [公式] 将数据从原始空间映射到特征空间,然后在特征空间中寻找一个体积最小的超球体。
SVDD的实现
目前MATLAB平台上的SVDD算法实现主要有:
(1)台湾大学林智仁 (Lin Chih-Jen) 教授等开发设计的libsvm 工具箱。
(2)SVDD算法提出者Tax D M J 等开发设计的 ddtools 工具箱。
但是上述工具箱关于SVDD算法的实现功能较少,如只支持正类样本SVDD超球体的构建等。
笔者在上述基础上,编写了基于MATLAB的同时支持正负类样本SVDD算法、集合参数寻优工具箱、降维工具箱等功能的实现代码;编写了基于Python的SVDD算法源码;编写了基于MATLAB的libsvm工具箱SVDD决策边界可视化源代码。
(1)MATLAB版本的GitHub网址为:
(2)Python版本的GitHub网址为(相比MATLAB版本的缺少参数寻优和降维模块):
(3)基于libsvm的SVDD决策边界可视化的GitHub网址为:
(4)MATLAB中文论坛
主要功能(SVDD & MATLAB)
基于OOP编写的核心模块
支持仅含正样本的SVDD超球体构建
支持同时包含正样本和负样本的SVDD超球体构建
支持包含高斯核函数、多项式核函数等多种核函数
包含绘制ROC曲线、决策边界等功能的可视化模块
包含数据预处理模块
集成基于YPEA工具箱的参数优化模块
集成基于drtoolbox的数据降维模块
注:
ROC曲线的绘制仅适用于同时包含正样本和负样本的SVDD
决策边界可视化仅支持2维训练数据;如果决策边界显示不完整,请把computeGridRange函数中的比例系数 'r’的值调大
参数优化算法容易陷入局部最优,计算条件允许的情况下,请调节参数优化算法和迭代次数,以及尝试运行多次优化过程。
多项式核函数的degree参数暂不支持优化。
demo中提供的训练集和测试集是根据给定比例随机生成的,每次运行的结果出现不一致的情况是正常的。
示例程序
(1) 高斯核函数
gauss : k(x,y) = exp(-(norm(x-y)/s)^2)
(2) 指数核函数
exp : k(x,y) = exp(-(norm(x-y))/s^2)
(3) 线性核函数
linear : k(x,y) = x’*y
(4) 拉普拉斯核函数
lapl : k(x,y) = exp(-(norm(x-y))/s)
(5) sigmoid核函数
sigm : k(x,y) = tanh(g*x’*y+c)
(6) 多项式核函数
poly : k(x,y) = (x’*y+c)^d
demo_SVDD (仅包含正样本的SVDD)
demo_SVDD_PO (仅包含正样本的SVDD+参数优化模块)
demo_SVDD_DR (仅包含正样本的SVDD+降维模块)
demo_SVDD_DR_PO (仅包含正样本的SVDD+参数优化模块+降维模块)
demo_nSVDD (同时包含正样本和负样本的SVDD)
demo_nSVDD_PO (同时包含正样本和负样本的SVDD+参数优化模块)
demo_nSVDD_DR (同时包含正样本和负样本的SVDD+降维模块模块)
demo_nSVDD_DR_PO (同时包含正样本和负样本的SVDD+参数优化模块+降维模块)
https://zhuanlan.zhihu.com/p/97522759