首先,确保你的MATLAB环境已经安装了Statistics and Machine Learning Toolbox,因为该工具箱包含了SVM相关的函数。接下来,我们将通过一个简单的二分类问题来演示SVM的实现过程。
步骤 1: 准备数据
假设我们有一个简单的二维数据集,其中包含两类点。我们可以使用MATLAB内置的随机数生成器来创建这些数据点。
```matlab
% 创建训练数据
rng(1); % 设置随机种子以保证结果可复现
X = [randn(100,2)+ones(100,2); randn(100,2)-ones(100,2)];
Y = [ones(100,1); -ones(100,1)];
```
步骤 2: 训练SVM模型
使用`fitcsvm`函数来训练支持向量机模型。这里我们选择径向基核函数(RBF kernel),因为它能够处理非线性可分的数据。
```matlab
% 训练SVM模型
svmModel = fitcsvm(X, Y, 'KernelFunction', 'rbf', 'BoxConstraint', 1);
```
步骤 3: 预测与评估
训练完成后,我们可以使用该模型对新数据进行预测,并计算预测的准确性。
```matlab
% 预测
predictions = predict(svmModel, X);
% 计算准确率
accuracy = sum(predictions == Y) / numel(Y);
fprintf('Accuracy: %.2f%%\n', accuracy 100);
```
步骤 4: 可视化结果
为了更好地理解SVM的工作原理,我们可以绘制决策边界以及支持向量。
```matlab
% 绘制数据点
figure;
gscatter(X(:,1), X(:,2), Y, 'br', 'ox');
hold on;
% 绘制支持向量
sv = svmModel.SupportVectors;
plot(sv(:,1), sv(:,2), 'ko', 'MarkerSize', 10, 'LineWidth', 2);
% 绘制决策边界
[x1Grid, x2Grid] = meshgrid(linspace(min(X(:,1)), max(X(:,1)), 100), linspace(min(X(:,2)), max(X(:,2)), 100));
xGrid = [x1Grid(:), x2Grid(:)];
[~, scores] = predict(svmModel, xGrid);
contour(x1Grid, x2Grid, reshape(scores(:,1), size(x1Grid)), [0 0], 'k');
legend('Class 1', 'Class 2', 'Support Vectors', 'Decision Boundary');
title('Support Vector Machine Classification');
xlabel('Feature 1');
ylabel('Feature 2');
grid on;
```
以上就是利用MATLAB实现支持向量机的基本步骤。这种方法不仅适用于简单的分类问题,还可以通过调整参数进一步优化模型性能。希望这份源代码对你有所帮助!