1. SVM与Matlab基础概述
支持向量机(SVM)是一种强大的监督学习算法,特别适合处理中小规模数据集的分类问题。Matlab的Statistics and Machine Learning Toolbox提供了完整的SVM实现,通过fitcsvm函数可以方便地构建二分类模型。当我们需要处理多分类问题时,可以采用"一对多"(One-vs-All)或"一对一"(One-vs-One)策略,或者直接使用fitcecoc函数。
在Matlab中实现SVM分类通常包含以下核心步骤:
- 数据准备与预处理(标准化、处理缺失值等)
- 选择适当的核函数(线性、高斯RBF、多项式等)
- 设置模型参数(如惩罚系数C、核参数等)
- 训练模型并进行预测
- 评估模型性能(准确率、混淆矩阵等)
重要提示:Matlab的fitcsvm默认使用序列最小优化(SMO)算法求解,该算法特别适合处理大规模数据集,计算效率较高。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据准备与预处理
2.1 数据格式要求
Matlab的fitcsvm函数接受多种数据输入形式:
- 数值矩阵X和响应向量Y
- 表格形式的数据(table)
- 使用公式指定预测变量和响应变量
matlab复制% 示例1:使用矩阵和向量
X = rand(100,4); % 100个样本,4个特征
Y = randi([0 1],100,1); % 二分类标签
% 示例2:使用表格数据
dataTable = table(rand(100,3),categorical(randi([0 1],100,1)));
2.2 数据标准化
不同尺度的特征会影响SVM的性能,特别是使用基于距离的核函数(如RBF核)时。Matlab提供了自动标准化选项:
matlab复制% 启用自动标准化
svmModel = fitcsvm(X,Y,'Standardize',true);
% 手动标准化后再训练
X_normalized = (X - mean(X))./std(X);
svmModel = fitcsvm(X_normalized,Y,'Standardize',false);
2.3 处理类别不平衡
当类别样本数量不均衡时,可以通过以下方法处理:
- 设置'ClassNames'参数明确类别顺序
- 使用'Prior'参数指定先验概率
- 通过'Cost'矩阵指定错分代价
matlab复制% 处理不平衡数据示例
classNames = {'rare','frequent'};
costMatrix = [0 1; 2 0]; % 将稀有类错分为常见类的代价更高
svmModel = fitcsvm(X,Y,'ClassNames',classNames,'Cost',costMatrix);
3. 核函数选择与参数调优
3.1 常用核函数比较
Matlab支持三种主
