实现SVM Matlab的功能

时间:2018-12-03 22:14:20

标签: matlab svm

我必须实现一个识别标签的SVM分类器。 代码是:

function[Y_SVM_test] = getSVM(x,y,z, labels)

%matrix that contain x,y,z
X = [];

%vector of labels
Y = [];

X = [X; x y z];
Y = [Y; labels];

cv = cvpartition(length(X),'holdout',0.2);

% Training set 
Xtrain = X(training(cv),:);
Ytrain = Y(training(cv));


% Test set
Xtest = X(test(cv),:);
Ytest = Y(test(cv));

tic
mySVM = fitcecoc(Xtrain,Ytrain);
toc

Y_SVM_test = predict(mySVM,Xtest);

end

使用功能fitcecoc,执行永无止境,我使用不正确吗?我尝试也使用函数fitcsvm,该函数在文档中似乎更具体,但是出现以下错误:Error using ClassificationSVM.prepareData (line 686) You can not train an SVM model for more than 2 classes. 总的来说,我不太了解在Matlab中运行SVM的最佳方法是什么。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您的代码对我来说看起来不错。当您说它永远不会结束时,我想您只是还没有等很久。如果您的数据集很大,则拟合ECOC SVM模型可能需要很长时间。

使用fitcecoc是适合多类SVM模型的正确方法。 SVM本身只是一个两类模型,由fitcsvm拟合。为了适合多类模型,需要包装器。 ECOC是这样的包装器-采取每个班级的工作,并针对该班级分别针对所有其他班级设置两班级模型。这就是为什么要花这么长时间的原因-它需要适合多个模型,每个模型一个。

PS:您不需要先X = [];,然后再X = [X; x y z];。只需说X = [x y z],它就具有相同的效果。同样,只需说Y = labels