我正在进行项目拇指识别。以下是代码我正在读取订单42 X 25的118张图像并将它们存储在训练矩阵中。
training=zeros(118, 1050);
imagefiles = dir('*.png');
nfiles = length(imagefiles);
for ii=1:nfiles
currentfilename = imagefiles(ii).name;
I = imread(currentfilename);
BW=im2bw(I,graythresh(I));
temp = reshape(BW,1,1050);
training(ii,:)=temp;
end
现在我正在创建一个labelData矩阵,为图像指定标签。
labelData = zeros(118,1);
labelData(1:50,:) = 0;
labelData(51:83,:) = 1;
labelData(84:118,:) = 2;
在这里,我通过提供训练数据和标签数据来训练我的系统。
options=optimset('MaxIter',5000);
SVMStruct = svmtrain(training,labelData,'Kernel_Function','linear','QuadProg_Opts',options);
但是当我运行此代码时,它会给我一个错误,如
Error 1 : SVMTRAIN only supports classification into two groups. GROUP contains 3 groups.
Error 2 : SVMStruct = svmtrain(training,labelData,'Kernel_Function','linear','QuadProg_Opts',options);
请帮助我在工作正常之前使用它的问题是什么,但现在我不知道发生了什么。提前谢谢。
答案 0 :(得分:3)
错误1告诉您问题所在 - MATLAB内置SVM仅支持二进制分类。您正在分配3个班级。
您的选择是:
答案 1 :(得分:1)
错误信息非常清楚。 MATLAB的svmtrain不支持多类分类,即只允许两个类。
所以,你有两个选择:1)编写自己的multiclass classifier作为svmtrain的包装器。您可以实施one-all-all或one-vs-one策略。 2)使用已支持多类分类的svm实现,例如libsvm。
答案 2 :(得分:0)
您的问题在标签数据向量中检查并找到了错误,如果课程数量超过那么,找到OAA架构师。