0

我正在做一个拇指识别项目。以下是我正在读取 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);

请帮助我在它工作正常之前我使用它的问题是什么,但现在我不知道发生了什么。提前致谢。

4

3 回答 3

3

错误 1 ​​告诉您问题所在 - MATLAB 内置 SVM 仅支持二进制分类。您正在分配 3 个班级。

您的选择是:

  1. 构造三个分类器:0 vs. 1,2 然后 1 vs. 0,2 然后 2 vs. 0,1 并查看每个分类器的输出。
  2. 构造 0 vs. not 0 然后 1 vs. 2
  3. 使用来自 LIBSVM 或 svmlight 或其他此类软件包的多类 SVM 训练器。
于 2012-05-29T18:56:34.487 回答
1

错误信息非常清楚。MATLAB 的 svmtrain 不支持多类分类,即只允许两个类。

因此,您有两个选择:1) 编写您自己的多类分类器作为 svmtrain 的包装器。您可以实施一对一或一对一的策略。2) 使用已经支持多类分类的 svm 实现,例如libsvm

于 2012-05-29T18:56:57.793 回答
0

你的问题是在 labelData 向量中检查它并找到错误,如果类的数量更多,则应该使用 OAA 架构师。

于 2012-07-16T19:30:31.770 回答