首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >4类svm matlab代码

4类svm matlab代码
EN

Stack Overflow用户
提问于 2015-09-13 05:26:04
回答 2查看 2.1K关注 0票数 0

我为2类svm分类器编写了代码,现在我想将它扩展到4类。

我有4门课和一些训练和测试的数据。我为这个分类尝试了很多MATLAB代码,但是我不知道如何将我的代码扩展到4类。我应该用matlab做这个工作,而不是像LIbsvm、svmlight或labview这样的程序.

请在这个过程中帮助我。

代码语言:javascript
复制
trainingdata = mydata
classes =[0;0;0;0;1;1;1;1;2;2;2;2;3;3;3;3]
[train, test] = crossvalind('holdOut',classes);
cp = classperf(classes);   
svmStruct = svmtrain(data(train,:),groups(train),...
'showplot',true,'boxconstraint',1e6); 
classes = svmclassify(svmStruct,data(test,:),'showplot',true); 
classperf(cp,classes,test);
EN

回答 2

Stack Overflow用户

发布于 2015-09-14 21:42:34

假设您有M类(在本例中为M=4)、trainingData和trainingLabels。有两种可能的备选方案(如评论中所指出的):a) 1-vs-all b) 1-vs-1

由于您只需要使用matlab svm,我建议使用1-vs-1方法。原因是but分类函数不返回分数,而只返回预测的类。如果您需要使用1-vs-all,您可以看到以下文章:如何在MATLAB中找到SVM分类器的得分?

下面,我假设你继续进行1-vs-1。要理解它,请阅读幻灯片3:https://www.sec.in.tum.de/assets/lehre/ws0910/ml/slideslecture9.pdf

简单地说,这是的培训:

你训练M*(M-1)/2二进制支持向量机分类器。在你的例子中,它是6个分类器,比较了类别1-vs-2,1-vs-3,1-vs-4,2-vs-3,2-vs-4和3-vs-4.注意,你不需要训练2-vs-1,因为它已经被1-vs-2覆盖了。在这个步骤中,您将需要使用正确的培训数据和标签来向svmtrain函数提供信息。例如,为了训练1-vs-2,您只需要这两个类的示例和标签。

您还需要将得到的6个分类器存储在一个很好的数据结构中。最简单的是multiModel{classA}{classB}。

--这是对未知查询向量的测试:

1)初始化一个投票向量票=零(M,1);以保留每个类别的选票。

2)用所有6个二进制分类器对查询向量进行分类。根据结果,您可以将选票(WinnerClassID)=选票(WinnerClassID)+1,例如,假设您得到以下二进制分类结果: 1-vs-2: 2-vs-3: 1-vs-4: 1-vs-3: 2-vs-4: 2-vs-4:2-vs-4:1 0。

3)最大票数类是查询向量的最终预测标签。在上面的例子中:由于2级有最高票数(3票),多类svm的结果是标签2。

票数 0
EN

Stack Overflow用户

发布于 2015-12-28 14:30:53

LIBSVM和LIBLINEAR是两个流行的开源机器学习库,它们都是在台大开发的,都是用C++编写的,不过都是用C编写的。LIBSVM实现了核化支持向量机(SVM)的SMO算法,支持分类和回归。但是,您也可以在matlab中实现它们,它们会给您一些mex代码,可以根据您的需要来分类。您可以从下面下载工具箱:https://github.com/cjlin1/libsvm http://www.csie.ntu.edu.tw/~cjlin/libsvm/

最近,我发现了一种新的方法DSVM,从elow链接下载并测试它:在这里输入链接描述

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32546612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档