?? fuzzysvm.m
字號:
function [ClassRate1,ClassRate2,PreLabelsu,value,Decision1,Decision2]=fuzzysvm(traindata,testdata)
% Usages:
% [ClassRate1,ClassRate2]=fuzzysvm(traindata,testdata)
%
% DESCRIPTION:
%
%
% Inputs:
%
% Outputs:
%取出訓(xùn)練數(shù)據(jù)的行和列
[row column]=size(traindata);
%取出類別個數(shù),要求其從1開始
num=max(traindata(:,column));
%每兩類數(shù)據(jù)建立一個分類器
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=[];
value=[];
%利用所得的分類器進行分類測試
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);']);
value=[value;xx]
%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);
%求取隸屬度最大對應(yīng)的類別號作為樣本的類別號
%%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
Decision2(i)=find(Preusum==max(Preusum));
end
ClassRate2=length(find((Decision2-testL)==0))/length(testL);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -