【问题标题】:How do I classify using SVM Classifier?如何使用 SVM 分类器进行分类?
【发布时间】:2012-04-02 19:44:19
【问题描述】:

我正在做一个肝肿瘤分类项目。实际上,我最初使用区域生长方法进行肝脏分割,然后使用 FCM 分割肿瘤。 然后,我使用灰度共生矩阵获得纹理特征。我的输出是

统计 =

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: anand.mishra2k88@gmail.com

% 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

请指导我。

图片:

【问题讨论】:

    标签: svm classification


    【解决方案1】:

    你必须把你得到的所有特征值连接成一个特征向量。然后对于 SVM,应该对特征进行归一化,以便每个维度中的值在 -1 和 1 之间变化,如果我没记错的话。我认为 libsvm 具有进行规范化的功能。

    因此,假设您的特征向量最终具有 N 维,并且您有 M 个训练实例,那么您的训练集应该是一个 M x N 矩阵。那么如果你有 P 个测试实例,你的测试集应该是一个 P x N 矩阵。

    【讨论】:

    • 谢谢。但是如何将所有的特征值拼接成一个特征向量呢?
    • @Gomathi: v = [stats.autoc, stats.contr, ...];
    • 非常感谢。我会试试看。
    • 我得到了特征向量。但我在规范化方面遇到了一些麻烦。我试过这样。 v=[stats.contr,stats.corrm,stats.energ,stats.entro,stats.homom] m=mean(v) sd=std(v) st=(v-m)/sd
    • 您不能标准化单个向量。您需要将所有向量放入矩阵中。然后在每列中找到最大值和最小值,并重新调整每列中的值,使最小值对应于 -1,最大值对应于 1。如果您可以访问它,请查看 Matlab 中的统计工具箱。它还可能具有对您有所帮助的功能。
    【解决方案2】:

    我还可以向您推荐一个非常流行的 SVM 实现,称为 SVMLight http://svmlight.joachims.org/

    您可以在网站上找到有关如何使用它的示例。也可以使用 Mex-matlav 包装器。

    正如 Dima 所指出的,您需要连接特征吗?

    顺便说一句,您能告诉我您使用哪个数据集进行肝肿瘤分类吗? 是否可以公开下载?

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 2016-12-01
      • 2013-07-16
      • 2013-02-04
      • 2016-09-13
      • 2016-01-21
      • 1970-01-01
      • 2014-10-02
      相关资源
      最近更新 更多