Matlab中的支持向量机
artificial-intelligence
classification
machine-learning
matlab
5
0

您能否在Matlab中使用支持向量机(SVM)给出4类分类的示例,例如:

atribute_1  atribute_2 atribute_3 atribute_4 class
1           2          3           4             0
1           2          3           5             0
0           2          6           4             1
0           3          3           8             1
7           2          6           4             2
9           1          7           10            3
参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

SVM最初是为二进制分类而设计的。然后将它们扩展为处理多类问题。想法是将问题分解为许多二元类问题,然后将它们组合以获得预测。

一种名为“永无止境”的方法,可以构建与所有类一样多的二进制分类器,每个分类器都经过训练可以将一个类与其他类分开。为了预测新实例,我们选择决策函数值最大的分类器。

另一种称为“ 一对一”的方法(我相信该方法在LibSVM中使用),构建k(k-1)/2二进制分类器,经过训练将每对类别彼此分开,并使用多数表决方案(max-获胜策略)来确定输出预测。

还有其他方法,例如使用纠错输出代码(ECOC)来构建许多冗余的二进制分类器,并使用此冗余来获得更鲁棒的分类(使用与汉明码相同的思想)。

示例(一对一):

%# load dataset
load fisheriris
[g gn] = grp2idx(species);                      %# nominal class to numeric

%# split training/testing sets
[trainIdx testIdx] = crossvalind('HoldOut', species, 1/3);

pairwise = nchoosek(1:length(gn),2);            %# 1-vs-1 pairwise models
svmModel = cell(size(pairwise,1),1);            %# store binary-classifers
predTest = zeros(sum(testIdx),numel(svmModel)); %# store binary predictions

%# classify using one-against-one approach, SVM with 3rd degree poly kernel
for k=1:numel(svmModel)
    %# get only training instances belonging to this pair
    idx = trainIdx & any( bsxfun(@eq, g, pairwise(k,:)) , 2 );

    %# train
    svmModel{k} = svmtrain(meas(idx,:), g(idx), ...
        'BoxConstraint',2e-1, 'Kernel_Function','polynomial', 'Polyorder',3);

    %# test
    predTest(:,k) = svmclassify(svmModel{k}, meas(testIdx,:));
end
pred = mode(predTest,2);   %# voting: clasify as the class receiving most votes

%# performance
cmat = confusionmat(g(testIdx),pred);
acc = 100*sum(diag(cmat))./sum(cmat(:));
fprintf('SVM (1-against-1):\naccuracy = %.2f%%\n', acc);
fprintf('Confusion Matrix:\n'), disp(cmat)

这是一个示例输出:

SVM (1-against-1):
accuracy = 93.75%
Confusion Matrix:
    16     0     0
     0    14     2
     0     1    15
收藏
评论

MATLAB目前不支持多类SVM。您可以使用svmtrain (2类)实现此目的,但是使用标准SVM软件包会容易得多。

我使用过LIBSVM ,可以确认它非常易于使用。


%%# Your data
D = [
1           2          3           4             0
1           2          3           5             0
0           2          6           4             1
0           3          3           8             1
7           2          6           4             2
9           1          7           10            3];
%%# For clarity
Attributes = D(:,1:4);
Classes = D(:,5);
train = [1 3 5 6];
test = [2 4];

%%# Train
model = svmtrain(Classes(train),Attributes(train,:),'-s 0 -t 2');

%%# Test
[predict_label, accuracy, prob_estimates] = svmpredict(Classes(test), Attributes(test,:), model);
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号