MATLAB 支持向量机(SVM)分类与教学演示系统
项目介绍
本项目是一款专为机器学习初学者研发的教学演示工具。通过在 MATLAB 环境下构建一个完整的 SVM 分类流水线,系统生动地展示了从原始数据生成、特征预处理、超参数自动化调优到模型多核函数对比及可视化的全过程。该系统不仅提供了理论实践的平台,还通过直观的决策边界动态绘图,帮助用户深入理解 SVM 在处理线性与非线性分类问题时的核心逻辑,如间隔最大化和核函数映射。
功能特性
- 模拟数据自动生成:系统内置高斯分布数据生成模块,可自动产生具有特定分布特征的二维分类数据集,模拟真实场景中的重叠与分离。
- 标准化数据预处理:集成了 Z-score 特征缩放和自动化的训练/测试集比例划分功能,确保模型训练的科学性。
- 多内核对比教学:通过同一数据集并行训练线性核(Linear)、多项式核(Polynomial)及径向基核(RBF),直观展示不同数学映射对决策边界形状的影响。
- 自动化参数优化:实现的网格搜索(Grid Search)算法结合 5 折交叉验证,能够自动寻找最优的惩罚因子 $C$ 和核函数参数 $sigma$。
- 交互式可视化评估:不仅能够绘制带有支持向量标注的二维决策边界等高线图,还集成了混淆矩阵图表,提供多维度的性能评估。
系统要求
- 软件环境:MATLAB R2018a 或更高版本。
- 必备工具箱:Statistics and Machine Learning Toolbox(统计与机器学习工具箱)。
实现逻辑说明
系统主程序按照机器学习标准管道流(Pipeline)设计,具体实现逻辑如下:
- 数据合成阶段:利用随机数生成技术创建两个类别。类别 1 和类别 2 分别以 (1.2, 1.2) 和 (-1.2, -1.2) 为中心呈高斯分布,并固定随机数种子以确保实验的可重复性。
- 预处理流水线:
-
特征缩放:计算特征的均值和标准差,对原始数据进行标准化处理,消除量纲影响。
-
样本划分:采用 Holdout 交叉验证方法,将数据集按 70:30 的比例分为模型学习用的训练集和验证泛化能力的测试集。
- 网格搜索优化:
- 遍历指定的 $C$ 值范围 ${0.1, 1, 10, 100}$ 和 $sigma$ 值范围 ${0.1, 0.5, 1, 2, 5}$。
- 在每一组参数组合下,使用
templateSVM 配置模型,并通过
fitcecoc 结合
kfoldLoss 计算 5 折交叉验证误差,最终锁定分类精度最高的参数组合。
- 多模型构建:基于最佳参数训练 RBF 模型,同时并行训练作为对比参照的线性模型与三阶多项式模型。
- 评估与可视化:
- 使用测试集数据进行前向预测,产出分类准确率。
- 调用辅助绘图逻辑,在二维平面上生成 dense grid(密集网格),计算每个网格点的预测分值,从而利用等高线函数绘制出非线性的决策边界。
关键函数与算法分析
- fitcsvm:系统核心函数,用于训练二分类支持向量机,支持配置多种 BoxConstraint(惩罚因子)和 KernelFunction。
- cvpartition & kfoldLoss:实现交叉验证的关键工具,用于在训练阶段评估模型对未知数据的预测能力,防止过拟合。
- gscatter & contourf:用于数据分布的可视化。系统通过
contourf 填充决策区域,通过 contour 提取分数等于 0 的线作为决策边界。 - SupportVectors 属性:代码通过提取模型内部的
SupportVectors 属性并在图中以圆圈标记,清晰地展示了哪些关键样本决定了边界的位置。 - 网格搜索算法:通过双重循环遍历参数空间,本质上是在超参数空间内寻找损失函数局部最小值的过程,展示了机器学习中调参的典型方法。
使用方法
- 启动 MATLAB 软件。
- 将系统程序文件放置在当前工作路径下。
- 直接运行主程序脚本。
- 程序将自动执行数据生成、模型训练与优化过程。
- 结果将通过图形窗口弹出,包括三个不同核函数的决策边界对比图以及一个测试集混淆矩阵直方图。
- 命令行窗口(Command Window)将实时输出网格搜索找到的最优参数及最终的分类准确率。