本代码参考 MATLAB 官方例程,实现 SVM 多分类器(one-versus-rest)。对于未知标签的测试集,初始化中测试样本的标签,以及结果分析中的验证部分可忽略。
OVR SVM
一对多(one-versus-rest)模型的基本策略:训练时依次将某一类别的样本归为正样本集,其余类的样本归为负样本集;这样对于拥有 nnn 种类型的样本集就可以构造出 nnn 个二分类器。
一般取获得最高分数的分类器对应的正样本集,为当前测试样本的类;对于所有分类器输出负分数的情况,此时测试样本可能不属于任一分类器对应的正样本类;对于多个分类器输出正分数的情况,可以考虑进行多一步骤的判决。
clear;
close all;
%--------------------------------- 初始化 --------------------------------%
% X % 训练样本, 第一个维度为样本数, 第二个维度为特征数
% testX % 测试样本
% Y % 训练样本的标签; 字符向量元胞数组表示
% testY % 测试样本的标签
%----------------------------- 训练一对多分类器 ---------------------------%
classes = unique(Y); % 标签排序去重
SVMModels = cell(size(classes,1),1); % 储存分类器的元胞数组
for j = 1:numel(classes)
% 通过字符串比较为分类器设置标签, 仅 classes{