matlab支持向量机三分类代码
时间: 2024-09-22 14:03:14 浏览: 44
在 MATLAB 中,对于三分类问题(multi-class classification),我们可以采用一对多(one-vs-all, OVA)策略或者一对一(one-vs-one, OVO)策略。这里我们演示一下 OVA 方法的示例代码:
首先,假设你已经有一个三分类数据集 `X` 和相应的标签向量 `y`(1, 2, 3 表示三个类别)。我们将分别创建两个二分类 SVM 模型,每个模型用于区分两个类别对:
```matlab
% 将三分类问题拆分为两个二分类问题
labels = unique(y); % 获取所有类别
num_classes = length(labels);
% 创建空的分类器数组
classifiers = cell(1, num_classes - 1);
for i = 1:num_classes - 1
for j = i + 1:num_classes
% 训练当前类别对的二分类 SVM
X_train = X(~ismember(y, labels(i:i+1)), :);
y_train = double(ismember(y, labels(j)))';
% 对应的测试数据
X_test = X(ismember(y, labels(i:i+1)), :);
y_test = double(ismember(y, labels(i:i+1)))';
model = fitcsvm(X_train, y_train, 'KernelFunction', 'linear'); % 线性核为例
% 存储分类器
classifiers{i, j} = model;
end
end
```
然后,你可以通过多数投票的方式确定样本属于哪一类:
```matlab
function predicted_class = predict_mva(classifiers, X)
votes = zeros(numel(X), 1);
for i = 1:size(classifiers, 1)
for j = i + 1:size(classifiers, 1)
vote = predict(classifiers{i, j}, X);
votes(vote == 1) = i; % 投票给赢家
votes(vote == -1) = j; % 投票给输家
end
end
[~, predicted_class] = max(cumsum(votes, 2));
end
% 测试分类器
predicted_y = predict_mva(classifiers, X_test);
```
阅读全文