使用SVM算法在matlab中进行拇指识别

时间:2012-05-29 18:52:37

标签: matlab machine-learning svm

我正在进行项目拇指识别。以下是代码我正在读取订单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);

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

3 个答案:

答案 0 :(得分:3)

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

您的选择是:

  1. 构建三个分类器:0对1,2然后是1对0,2然后是2对0,1并查看每个分类器的输出。
  2. 构造0与非0然后1对2
  3. 使用LIBSVM或svmlight或其他此类软件包中的多类SVM培训师。

答案 1 :(得分:1)

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

所以,你有两个选择:1)编写自己的multiclass classifier作为svmtrain的包装器。您可以实施one-all-all或one-vs-one策略。 2)使用已支持多类分类的svm实现,例如libsvm

答案 2 :(得分:0)

您的问题在标签数据向量中检查并找到了错误,如果课程数量超过那么,找到OAA架构师。