簡體   English   中英

實現SVM Matlab的功能

[英]Function to implement SVM Matlab

我必須實現一個可識別標簽的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的最佳方法是什么。 有人能幫我嗎?

您的代碼對我來說看起來不錯。 當您說它永遠不會結束時,我想您只是還沒有等很久。 如果數據集很大,則擬合ECOC SVM模型可能需要很長時間。

使用fitcecoc是適合多類SVM模型的正確方法。 SVM僅是兩類模型,由fitcsvm 為了適合多類模型,需要包裝器。 ECOC是這樣的包裝器-采取每個班級的工作,並針對該班級分別針對所有其他班級設置兩班級模型。 這就是為什么要花這么長時間的原因-它需要適合多個模型,每個模型一個。

PS:您不需要X = []; 然后X = [X; xyz]; X = [X; xyz]; 只需說X = [xyz] ,它具有相同的效果。 同樣,只需說Y = labels

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM