Matlab 中数字图像集上的 SVM 分类



我必须在数字数据集上使用SVM分类器。该数据集由数字 28x28 的图像和 2000 张图像组成。 我尝试使用 svmtrain,但 matlab 给出了一个错误,即 svmtrain 已被删除。所以现在我正在使用 Fitcsvm。

我的代码如下:

labelData = zeros(2000,1);
for i=1:1000
labelData(i,1)=1;
end
for j=1001:2000
labelData(j,1)=1;
end
SVMStruct =fitcsvm(trainingData,labelData) 
%where training data is the set of images of digits.

我需要知道如何使用 svm 预测测试数据的输出?进一步我的代码是否正确?

您要查找的函数是predict。它将 SVM 对象作为输入,后跟数据矩阵并返回预测的标签。 确保不是在所有数据上训练模型,而是在合理的子集(通常为 70%(上训练模型。您可以使用交叉验证准备:

% create cross-validation object
cvp = cvpartition(Lbl,'HoldOut',0.3);
% extract logical vectors for training and testing data
lgTrn = cvp.training;
lgTst = cvp.test;
% train SVM
mdl = fitcsvm(Dat(lgTrn,:),Lbl(lgTrn));
% test / predict SVM
Lbl_prd = predict(mdl,Dat(lgTst,:));

请注意,您的标签会产生单个向量。

《数学作品》之所以svmtrain改为fitcsvm,是因为简洁。现在很清楚它是"分类"(fitcsvm(还是"回归"(fitrsvm(。

最新更新