[英]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.