⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fuzzysvm.asv

📁 标准svm3.0程序 内有mex优化程序
💻 ASV
字号:
function [ClassRate1,ClassRate2,PreLabelsu,Decision1,Decision2]=fuzzysvm(traindata,testdata)
% Usages:
%  [ClassRate1,ClassRate2]=fuzzysvm(traindata,testdata)
%  
% DESCRIPTION:
%   
%
% Inputs:
%
% Outputs:  

%取出训练数据的行和列
[row column]=size(traindata);
%取出类别个数,要求其从1开始
num=max(traindata(:,column));
%每两类数据建立一个分类器
for i=1:num
    for j=1:num
        if (i<j)
      % eval(['ssr' num2str(col) '=r;']);
       iloc=find(traindata(:,column)==i);
       jloc=find(traindata(:,column)==j);
       SamplesI=traindata([iloc;jloc],1:column-1);
       LabelsI=traindata([iloc;jloc],column);
       Samples=SamplesI';
       Labels=LabelsI';
       eval(['[AlphaY' num2str(i) num2str(j) ', SVs' num2str(i) num2str(j) ', Bias' num2str(i) num2str(j) ', Parameters' num2str(i) num2str(j) ', nSV' num2str(i) num2str(j) ', nLabel' num2str(i) num2str(j) ']=LinearSVC(Samples, Labels);']);
        end
    end
end

%进行测试
testSI=testdata(:,1:column-1);
testLI=testdata(:,column);
testS=testSI';
testL=testLI';
PreLabelsu=[];
Preu=[];
%利用所得的分类器进行分类测试
for i=1:num
    for j=1:num
    if (i<j)
eval(['[ClassRate' num2str(i) num2str(j) ', DecisionValue' num2str(i) num2str(j) ', Ns' num2str(i) num2str(j) ', ConfMatrix' num2str(i) num2str(j) ', PreLabels' num2str(i) num2str(j) ']= SVMTest(testS,testL, AlphaY' num2str(i) num2str(j) ', SVs' num2str(i) num2str(j) ', Bias' num2str(i) num2str(j) ',Parameters' num2str(i) num2str(j) ', nSV' num2str(i) num2str(j) ', nLabel' num2str(i) num2str(j) ');']);
xx=eval(['DecisionValue' num2str(i) num2str(j)]);
mfparams = [log(.25) 0];
mftype = 'sigmf';
eval(['Preu' num2str(i) num2str(j) '=evalmf(xx,mfparams,mftype);']);
%eval(['PreLabels' num2str(i) num2str(j) ',Preu' num2str(i) num2str(j)])
%pause
eval(['PreLabelsu=[PreLabelsu;[PreLabels' num2str(i) num2str(j) ';Preu' num2str(i) num2str(j) ']];']);
eval(['Preu=[Preu;Preu' num2str(i) num2str(j) '];']);
    end
    end   
end

%取出所有分类器得出的类别号
PreLabels=[];
for i=1:num
    for j=1:num
        if (i<j)
            eval(['PreLabels=[PreLabels;PreLabels' num2str(i) num2str(j) '];'])
        end
    end
end
            
%PreLabels=[PreLabels12;PreLabels13;PreLabels23];

%求取多分类器中输出类别最多的作为样本的类别号
for i=1:length(PreLabels)
   for j=1:num
       Labelnum(j)=length(find(PreLabels(:,i)==j));
   end    
Decision1(i)=min(find(Labelnum==max(Labelnum)));
end
ClassRate1=length(find((Decision1-testL)==0))/length(testL);

%求取隶属度最大对应的类别号作为样本的类别号
%%for i=1:length(PreLabels)
  %  PreLabelsrow=PreLabels(:,i);
   % Decision2(i)=PreLabelsrow(find(Preu(:,i)==max(Preu(:,i))));
   % Decisionu(i)=max(Preu(:,i));    
   %end
%%%%隶属度和最大的作为类别号
for i=1:length(PreLabels)
    Preui=Preu(:,i);
  for j=1:num
       Preusum(j)
       sum(Preui(find(PreLabels(:,i)==j) )));
   end
   Decision1(i)=find(Labelnum==max(Preusum));
end

ClassRate2=length(find((Decision2-testL)==0))/length(testL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -