📄 fuzzysvm.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 + -