基于支持向量机(SVM)的多策略二分类与多分类系统
项目介绍
本项目是一个在MATLAB环境下开发的完整支持向量机(SVM)分类框架。该系统不仅实现了基础的核心二分类算法,还扩展支持了两种处理多分类问题的经典策略:一对一(One-vs-One, OVO)和一对多(One-vs-Rest, OVR)。通过求解对偶问题的凸优化,系统能够精确提取支持向量并构建最优超平面。系统内置了多种核函数,能够灵活处理线性不可分的复杂数据分布,并提供了从数据预处理、模型训练、性能评估到决策边界可视化的全流程功能。
功能特性
- 算法核心:基于拉格朗日对偶性求解二次规划问题(Quadratic Programming),而非调用黑盒工具箱函数,更利于理解SVM本质。
- 多分类方案:内置OVO和OVR两种主流多分类转化策略,适应不同的应用场景。
- 灵活的核函数:支持线性核(Linear)、多项式核(Polynomial)以及高斯径向基核(RBF),可处理高度非线性的数据。
- 完善的评估体系:自动计算分类准确率,并手动构建混淆矩阵以分析各类别间的误判情况。
- 直观的可视化:生成高质量的二维决策边界填充图,清晰展示模型在特征空间中的分类效果。
- 高度参数化:支持自定义惩罚系数C、核函数参数(如Gamma、阶数)等。
实现逻辑与流程
主程序按照以下流程顺序执行:
- 数据准备:通过数学函数生成三类具有旋涡状分布的非线性模拟数据。
- 预处理:对数据进行标准化处理(Z-Score Normalization),使特征均值为0,标准差为1。
- 数据集划分:按照70%训练集、30%测试集的比例随机打乱并分配样本。
- 模型配置:初始化SVM超参数,默认采用RBF核函数以应对非线性分布。
- 模型训练:
- 演示基本的二分类逻辑(从三类中提取前两类进行映射)。
- 构建OVO模型,训练N*(N-1)/2个子模型并存储。
- 构建OVR模型,为每个类别训练一个单独的判别器。
- 预测与评估:
- OVO预测:通过所有子模型投票,得票最多的类作为预测结果。
- OVR预测:通过对比各判别器的原始置信得分,取得分最高的类作为结果。
- 数据可视化:在网格化空间中预测每个点的归属,并使用不同的色彩区域标注决策边界,最后叠加原始样本点。
关键函数与算法细节说明
- 核矩阵计算 (kernel_matrix):接收特征矩阵并根据选择的核函数(线性、多项式、RBF)计算样本间的核映射,其中RBF核利用欧式距离的平方进行指数化计算。
- 二分类训练 (svm_train_binary):核心求解器。通过构造Q矩阵(包含标签与核阵的乘积),使用内点凸优化算法求解二次规划问题。提取大于阈值的alpha值对应的样本作为支持向量,并计算偏差项b。
- 多分类策略 (train_ovo/train_ovr):
-
OVO:循环遍历所有类别对,进行子数据集筛选和标签重映射(+1/-1),生成子模型集合。
-
OVR:针对每一类,将该类设为+1,其余所有类统一设为-1,训练全局判别器。
- 二分类得分预测 (svm_predict_binary_raw):通过支持向量、拉格朗日乘子和核函数计算样本到超平面的有符号距离,作为判别的原始置信度。
- 决策边界绘图 (plot_decision_boundary):利用meshgrid生成覆盖特征空间的密集网格,调用预测函数后使用contourf生成色块背景。
系统要求
- 软件环境:MATLAB 2016b 或更高版本。
- 依赖工具箱:需要安装 Optimization Toolbox(用于调用 quadprog 求解二次规划)。
- 硬件要求:基础办公配置即可,对于300-500个样本规模的运算速度极快。
使用方法
- 确保安装了MATLAB及其优化工具箱。
- 在同一目录下放置相关代码函数。
- 运行主函数,控制台将实时输出训练进度。
- 运行结束后,系统会自动弹出可视化窗口显示OVO与OVR的决策边界对比图,并在命令行窗口输出准确率指标和性能分析。
- 如需测试自己的数据,可修改主函数中的数据读取部分,确保特征矩阵为N*2维(可视化限制)或N*D维,标签为从1开始的连续整数。