matlab支持向量机svm代码
时间: 2024-12-31 10:28:17 浏览: 33
### MATLAB中实现支持向量机(SVM)的代码示例
在MATLAB环境中,可以利用内置函数`fitcsvm`来进行分类任务和支持向量机的学习过程。下面提供了一个简单的例子来展示如何创建并训练一个基于线性核的支持向量机模型。
```matlab
% 加载鸢尾花数据集
load fisheriris;
X = meas; % 特征矩阵
Y = species; % 类标签
% 将类别转换为数值型变量
categorical(Y);
Y = grp2idx(Y);
% 划分训练集和测试集
cv = cvpartition(size(X,1),'HoldOut',0.3);
XTrain = X(training(cv),:);
YTrain = Y(training(cv));
XTest = X(test(cv),:);
YTest = Y(test(cv));
% 使用 fitcsvm 函数构建 SVM 模型
Mdl = fitcsvm(XTrain,YTrain,'Standardize',true,'KernelFunction','linear');
% 预测新观测值所属类别
predictedLabels = predict(Mdl,XTest);
% 计算准确率
accuracy = sum(predictedLabels==YTest)/numel(YTest)*100;
disp(['Accuracy of the model is ', num2str(accuracy), '%']);
```
这段程序首先加载了经典的鸢尾花数据集,并进行了必要的预处理操作,比如将字符串类型的类别转化为整数表示形式;接着通过交叉验证的方式划分出了训练集合与测试集合;最后调用了`fitcsvm()`函数完成建模工作,在这里指定了标准化选项以及选择了线性的内核函数[^4]。
对于回归问题,则可采用`fitrsvm`命令配合不同的参数设置以适应具体应用场景的需求:
```matlab
% 创建随机输入特征和输出响应的数据集
rng('default') % 设置随机种子以便重复实验结果
N = 100; % 数据点数量
x = linspace(-5*pi,5*pi,N)';
y = sin(x) + randn(N,1).*abs(sin(2*x));
% 构造训练集和测试集
trainIdx = mod((1:N)',5)>0;
testIdx = ~trainIdx;
xTrain = x(trainIdx,:);
yTrain = y(trainIdx,:);
xTest = x(testIdx,:);
yTest = y(testIdx,:);
% 定义并拟合 SVM 回归模型
mdl = fitrsvm(xTrain,yTrain,...
'Standardize',true,... % 对输入特征执行标准化变换
'KernelFunction','rbf',... % 应用 RBF 核函数
'Epsilon',0.1,... % 设定不敏感损失带宽
'BoxConstraint',1e3); % 控制松弛因子大小
% 绘图显示原始曲线及其预测值对比情况
figure();
plot(x,y,'b.'); hold on;
plot(x(ismember(x,xTrain)),predict(mdl,x(ismember(x,xTrain))),'ro');
legend({'True Data Points','Predictions'},...
'Location','BestOutsidePlot');
xlabel('Input Feature'); ylabel('Output Response');
title('Support Vector Regression with Gaussian Kernel');
hold off;
```
此段脚本展示了怎样运用径向基(RBF)核建立支持向量回归(SVR),并通过图形直观呈现实际测量值同估计值得差异状况[^3]。
阅读全文