2012-03-17 280 views
2

我正在做一个肝肿瘤分类的项目。实际上,我最初使用区域生长方法进行肝脏分割,并使用FCM分割肿瘤。然后,我用Gray Level Co-occurence Matrix得到纹理特征。我该输出是如何使用SVM分类器进行分类?

统计=

autoc: [1.857855266614132e+000 1.857955341199538e+000] 
contr: [5.103143332457753e-002 5.030548650257343e-002] 
corrm: [9.512661919561399e-001 9.519459060378332e-001] 
corrp: [9.512661919561385e-001 9.519459060378338e-001] 
cprom: [7.885631654779597e+001 7.905268525471267e+001] 

现在我应该怎么给这个作为输入到SVM程序。

function [itr] = multisvm(T,C,tst) 
%MULTISVM(2.0) classifies the class of given training vector according to the 
% given group and gives us result that which class it belongs. 
% We have also to input the testing matrix 

%Inputs: T=Training Matrix, C=Group, tst=Testing matrix 
%Outputs: itr=Resultant class(Group,USE ROW VECTOR MATRIX) to which tst set belongs 

%----------------------------------------------------------------------% 
% IMPORTANT: DON'T USE THIS PROGRAM FOR CLASS LESS THAN 3,    % 
%   OTHERWISE USE svmtrain,svmclassify DIRECTLY or   % 
%   add an else condition also for that case in this program. % 
%   Modify required data to use Kernel Functions and Plot also% 
%----------------------------------------------------------------------% 
%      Date:11-08-2011(DD-MM-YYYY)     % 
% This function for multiclass Support Vector Machine is written by 
% ANAND MISHRA (Machine Vision Lab. CEERI, Pilani, India) 
% and this is free to use. email: [email protected] 

% Updated version 2.0 Date:14-10-2011(DD-MM-YYYY) 

u=unique(C); 
N=length(u); 
c4=[]; 
c3=[]; 
j=1; 
k=1; 
if(N>2) 
    itr=1; 
    classes=0; 
    cond=max(C)-min(C); 
    while((classes~=1)&&(itr<=length(u))&& size(C,2)>1 && cond>0) 
%This while loop is the multiclass SVM Trick 
     c1=(C==u(itr)); 
     newClass=c1; 
     svmStruct = svmtrain(T,newClass); 
     classes = svmclassify(svmStruct,tst); 

% This is the loop for Reduction of Training Set 
     for i=1:size(newClass,2) 
      if newClass(1,i)==0; 
       c3(k,:)=T(i,:); 
       k=k+1; 
      end 
     end 
     T=c3; 
     c3=[]; 
     k=1; 

% This is the loop for reduction of group 
     for i=1:size(newClass,2) 
      if newClass(1,i)==0; 
       c4(1,j)=C(1,i); 
       j=j+1; 
      end 
     end 
     C=c4; 
     c4=[]; 
     j=1; 

     cond=max(C)-min(C); % Condition for avoiding group 
          %to contain similar type of values 
          %and the reduce them to process 

% This condition can select the particular value of iteration 
% base on classes 
     if classes~=1 
      itr=itr+1; 
     end  
    end 
end 

end 

请亲引导我。

图片: tumor1 tumor2 tumor3

回答

0

你必须采取所有的特征值,你和它们连接成一个特征向量。然后,对于SVM,要对特征进行归一化处理,以便每个维度的值在-1和1之间变化,如果我没有记错的话。我认为libsvm具有进行规范化的功能。因此,假设你的特征向量具有N个维度,并且你有M个训练实例,那么你的训练集应该是一个M×N矩阵。那么如果你有P个测试实例,你的测试集应该是一个P×N矩阵。

+0

谢谢。但是如何将所有的特征值连接成一个特征向量? – Gomathi 2012-03-22 14:54:47

+0

@Gomathi:v = [stats.autoc,stats.contr,...]; – Dima 2012-03-22 15:04:20

+0

非常感谢。我会试试看。 – Gomathi 2012-03-22 15:05:57

0

我还可以建议你一个非常流行的SVM实现,称为SVMLight http://svmlight.joachims.org/

你可以在网站上找到如何使用它的例子。 Mex-matlav包装它也是可用的。

正如Dima指出的那样,您需要连接功能?

btw你能告诉我哪个数据集用于肝肿瘤分类吗? 是否公开可供下载?