关于svm分类的matlab代码
时间: 2023-09-04 14:08:21 浏览: 128
以下是一个使用SVM(支持向量机)分类的MATLAB代码示例:
假设你有一个数据集,包含两个类别(正类和负类),每个数据点有两个特征。首先,你需要将数据集分成训练集和测试集。训练集将用于训练分类器,测试集将用于评估分类器的性能。
```matlab
% 生成随机数据
rng(1); % 设置随机数种子
data = [randn(50,2)+ones(50,2); randn(50,2)-ones(50,2)];
labels = [ones(50,1); -ones(50,1)];
% 分成训练集和测试集
trainData = data(1:80,:);
trainLabels = labels(1:80);
testData = data(81:end,:);
testLabels = labels(81:end);
```
接下来,创建一个SVM分类器对象并训练它。可以使用fitcsvm函数来完成这个任务。该函数需要训练数据和相应的标签作为输入,并返回一个已训练好的分类器对象。
```matlab
% 创建SVM分类器对象
svm = fitcsvm(trainData, trainLabels);
% 使用训练数据训练分类器
svm = fitPosterior(svm); % 计算后验概率
```
现在,使用测试集来评估分类器的性能。可以使用predict函数来预测测试数据的标签,并使用confusionmat函数计算混淆矩阵。混淆矩阵将显示分类器正确和错误分类的情况。
```matlab
% 使用测试数据评估分类器性能
predictions = predict(svm, testData);
confMat = confusionmat(testLabels, predictions);
accuracy = sum(diag(confMat))/sum(confMat(:));
fprintf('Accuracy: %.2f%%\n', accuracy * 100);
disp(confMat);
```
最后,你可以使用plot函数可视化数据和分类器的决策边界。决策边界是分类器将正类和负类分开的直线或曲线。
```matlab
% 可视化数据和决策边界
figure;
gscatter(data(:,1), data(:,2), labels,'rb','+x');
hold on;
% 绘制决策边界
xrange = [min(data(:,1)), max(data(:,1))];
yrange = [min(data(:,2)), max(data(:,2))];
[x, y] = meshgrid(xrange(1):0.01:xrange(2), yrange(1):0.01:yrange(2));
xy = [x(:) y(:)];
[~, scores] = predict(svm, xy);
contour(x, y, reshape(scores(:,2), size(x)), [0 0], 'k');
legend('Positive', 'Negative', 'Decision boundary');
```
这就是一个简单的使用SVM分类的MATLAB代码示例。
阅读全文