【问题标题】:Function to implement SVM Matlab实现 SVM Matlab 的函数
【发布时间】:2018-12-04 21:47:52
【问题描述】:

我必须实现一个识别标签的 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 的最佳方法是什么。有人可以帮我吗?

【问题讨论】:

    标签: matlab svm


    【解决方案1】:

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

    使用fitcecoc 是拟合多类SVM 模型的正确方法。 SVM 本身只是一个二分类模型,由fitcsvm 拟合。为了拟合多类模型,需要一个包装器。 ECOC 就是这样一个包装器——它是做什么来获取每个类的,并分别为该类与所有其他类拟合一个二类模型。这就是为什么它需要这么长时间 - 它需要适合多个模型,每个类一个。

    PS:你不需要X = [];,然后是X = [X; x y z];。就说X = [x y z],效果一样。同样,只需说Y = labels

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      相关资源
      最近更新 更多