初学者支持向量机分类与可视化演示系统
项目简介
本项目专为机器学习初学者设计,基于 MATLAB 平台开发。旨在通过直观的代码和可视化结果,展示支持向量机(SVM)的核心原理、核技巧(Kernel Trick)以及在不同数据分布下的表现。项目不仅包含从数据生成到模型评估的完整流程,还特别强调了决策边界、最大间隔平面以及“支持向量”的高分辨率可视化,帮助用户深入理解 SVM 的几何意义。
功能特性
- 多样化的数据场景:支持自动生成线性分布模拟数据、非线性环形模拟数据,以及加载经典的 Iris 鸢尾花真实数据集。
- 多核函数演示:演示了线性核(Linear)在处理简单数据时的表现,以及高斯核(RBF)在处理复杂非线性数据时的强大能力。
- 深度的可视化分析:
* 绘制高分辨率的决策边界颜色区域。
* 精准描绘决策边界(Decision Boundary)与最大间隔平面(Margins)。
* 高亮标记出决定模型边界的关键样本点——“支持向量”。
- 完整的评估流程:包含数据集的训练/测试划分(Hold-Out)、分类准确率计算及混淆矩阵的生成。
- 结果可复现:内置随机种子设置,确保每次运行的数据生成和模型训练结果一致。
系统要求
- MATLAB R2016a 或更高版本
- Statistics and Machine Learning Toolbox(必须安装,项目依赖
fitcsvm、cvpartition、confusionchart 等核心函数)
使用方法
直接运行主脚本即可启动演示。程序将依次执行三个预设场景,并在执行完毕后弹出三个包含可视化结果的图形窗口。命令行窗口将输出每个场景的数据集信息和测试集准确率。
详细实现逻辑与核心算法
项目采用模块化设计,主要包含以下核心逻辑与函数实现:
1. 核心控制流程
主程序通过
main 函数设置随机种子(rng 42),并依次调用各个演示场景。
使用线性分布的模拟数据配合线性核函数。展示 SVM 寻找将两类数据完全分开且间隔最大的超平面的基本能力。
使用环形分布数据配合高斯核(RBF)。参数设置为 C=10(较高惩罚)和 Sigma=0.5(较小核宽),演示 SVM 如何构建封闭的、不规则的决策边界来解决非线性分类问题。
使用 Iris 鸢尾花数据集配合高斯核。虽然数据本身维度较高,但为了可视化,仅选取花瓣长度和花瓣宽度两个强特征,并设置核参数 Sigma 为自动模式('auto'),展示算法在真实数据上的泛化能力。
2. SVM 模型构建与训练
利用 MATLAB 统计工具箱中的
fitcsvm 函数构建分类器。
- 数据标准化:在训练过程中强制开启 Z-score 标准化(
Standardize, true),确保不同尺度的特征对距离计算贡献均衡。 - 核函数配置:根据场景需求动态切换 Linear 或 RBF 核函数。
- 参数调优:支持调整箱约束(BoxConstraint, C)以控制对误分类的容忍度,以及调整核尺度(KernelScale, Sigma)以控制高斯函数的频宽。
3. 数据集生成与处理
generate_data 函数负责提供三种类型的数据:
- Linear(线性):生成两组服从高斯分布的簇,中心分别位于 (2,2) 和 (-2,-2)。
- Ring(环形):利用极坐标转换,生成中心圆点(类别1)和外围圆环(类别2),制造典型的非线性可分问题。
- Iris(鸢尾花):加载 Fisher Iris 数据,提取第3、4列特征(花瓣长度与宽度),并专门筛选 Versicolor 和 Virginica 两个较难区分的类别进行二分类任务。
- 数据划分:使用
cvpartition 执行 Hold-Out 验证,固定将 70% 数据用于训练,30% 数据用于测试。
4. 边界与支持向量可视化
visualize_boundary 是本项目的核心可视化引擎,其实现细节如下:
- 网格预测:在数据分布范围内构建精细的网格(步长 0.02),利用训练好的模型预测网格中每个点的分类得分。
- 等高线绘制:
*
背景色:使用
contourf 绘制透明度为 0.3 的填充等高线,直观展示分类区域。
*
决策边界:绘制 Score = 0 的黑色实线,代表分类超平面。
*
最大间隔:绘制 Score = 1 和 Score = -1 的红蓝虚线,直观展示 SVM 的“间隔(Margin)”概念。
- 支持向量高亮:通过访问模型的
IsSupportVector 属性,识别并在原图中用黑色圆圈额外标记出支持向量,展示它们是如何决定最终决策边界的。
5. 性能评估
- 准确率:计算模型在未见过的 30% 测试集上的预测准确度。
- 混淆矩阵:使用
confusionchart 绘制图表,直观展示模型在各类标签上的真阳性、假阳性等分布情况。