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

📄 test7.m

📁 模式识别中的十大经典算法,有详细的实现过程,花了很大工夫,现挥泪上传
💻 M
字号:
function result=test7()

clear all
clc
load 'D:/iris.mat'

n=1000;
acc_ratio=zeros(1,n);
acc=zeros(1,n);
itera=zeros(1,n);

for i=1:1:n
    m=25;
    p1 = randperm(50)+50;
    train_index1 = p1(1,1:m);
    tain_data1 = Iris(train_index1,:);
    predict_data1=Iris(setdiff(p1,train_index1),:);

    p3 = randperm(50)+100;
    tain_index3=p3(1,1:m);
    tain_data3 = Iris(tain_index3,:);
    predict_data3=Iris(setdiff(p3,tain_index3),:);

    totallen=size(tain_data1,1)+size(tain_data3,1);
    r=2;
    posw=[1 linspace(1,1,size(tain_data1,2))]'*r;
    negw=[linspace(1,1,size(tain_data1,2)) 1]'*(1/r);
    
    [posw,negw,itera(i)]=Winnow1(tain_data1,tain_data3,posw,negw,5);
     
    acc(i)=cacul_acc(tain_data1,tain_data3,posw,negw);
    acc_ratio(i)=cacul_acc(predict_data1,predict_data3,posw,negw);
end

format long
result.exp_times=n;
result.train_samples=m;
result.test_samples=50-m;
result.iterations=mean(itera);
result.train_acc=mean(acc);
result.acc_mean=mean(acc_ratio);
result.acc_var=std(acc_ratio,1,2);


function [posw negw,itera]=Winnow1(Data1,Data2,posw,negw,step)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% batch winnow algorithm 
%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[RowData1,ColumnData1]=size(Data1);
[RowData2,ColumnData2]=size(Data2);
poslabel=ones(RowData1,1)*1;
neglabel=ones(RowData2,1)*-1;
labelall=cat(1,poslabel,neglabel);
ExpandData1=cat(2,(linspace(1,1,RowData1))',Data1);
ExpandData2=cat(2,(linspace(1,1,RowData2))',Data2);
TotalData=cat(1,ExpandData1,ExpandData2);
[Row,Column]=size(TotalData);

itera=0;Guard=1;margin=1.3;
while (sum(Guard)&(itera<1000))
    
    curclass=TotalData*posw-TotalData*negw;
    curlevel=min(abs(curclass));
    
    tempflag=sign(curclass);
    z=find(tempflag~=labelall);
    %tposw=posw;tnegw=negw;
    if(~isempty(z)|(curlevel<margin))
        
         s1=find(tempflag==1);
         index1=intersect(z,s1);
         if(~isempty(index1))
             posw=(sum(step.^(-TotalData(index1,:)),1))'.*posw;
             negw=(sum(step.^( TotalData(index1,:)),1))'.*negw;
             posw=posw./norm(posw+0.01,1);negw=negw./norm(negw+0.01,1);
         elseif(~isempty(s1))
             posw=(sum(step.^( TotalData(s1,:)),1))'.*posw;
             negw=(sum(step.^(-TotalData(s1,:)),1))'.*negw;
             posw=posw./norm(posw+0.01,1);negw=negw./norm(negw+0.01,1);
         end
         
         s2=find(tempflag==-1);
         index2=intersect(z,s2);
         if(~isempty(index2))
             posw=(sum(step.^( TotalData(index2,:)),1))'.*posw;
             negw=(sum(step.^(-TotalData(index2,:)),1))'.*negw;
             posw=posw./norm(posw+0.01,1);negw=negw./norm(negw+0.01,1);
         elseif(~isempty(s2))
             posw=(sum(step.^(-TotalData(s2,:)),1))'.*posw;
             negw=(sum(step.^( TotalData(s2,:)),1))'.*negw;
             posw=posw./norm(posw+0.01,1);negw=negw./norm(negw+0.01,1);
         end
         
    else
        Guard=0;
    end
    %posw=tposw;%+posw;negw=tnegw+negw;
    step=step+0.1;
    itera=itera+1;
end


function [posw negw,itera]=Winnow2(Data1,Data2,posw,negw,step)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% sequential winnow algorithm 
%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[RowData1,ColumnData1]=size(Data1);
[RowData2,ColumnData2]=size(Data2);
poslabel=ones(RowData1,1)*1;
neglabel=ones(RowData2,1)*-1;
labelall=cat(1,poslabel,neglabel);
ExpandData1=cat(2,(linspace(1,1,RowData1))',Data1);
ExpandData2=cat(2,(linspace(1,1,RowData2))',Data2);
TotalData=cat(1,ExpandData1,ExpandData2);
[Row,Column]=size(TotalData);

itera=0;Guard=1;k=0;
while (sum(Guard)&(itera<1000))
    
    tempflags=sign(TotalData*posw-TotalData*negw);
    if(isempty(find(tempflags~=labelall))) Guard=0;break;end
    
    k=k+1;itera=itera+1;k=mod(k,(Row+1));if(k==0) k=1;end
    tempflag=sign(TotalData(k,:)*posw-TotalData(k,:)*negw);
    if(tempflag~=labelall(k))
        if(tempflag==1)
            posw=(step.^(-TotalData(k,:)))'.*posw;
            negw=(step.^( TotalData(k,:)))'.*negw;
        else
            posw=(step.^( TotalData(k,:)))'.*posw;
            negw=(step.^(-TotalData(k,:)))'.*negw;
        end
    end
    %posw=posw./norm(posw+0.01,1);negw=negw./norm(negw+0.01,1);
    step=step+0.1;
    itera=itera+1;
end
sss=0;

function accuracy_ratio=cacul_acc(posdata,negdata,posw,negw)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%%  caculate classifier error
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[RowData1,ColumnData1]=size(posdata);
[RowData2,ColumnData2]=size(negdata);
ExpandData1=cat(2,(linspace(1,1,RowData1))',posdata);
ExpandData2=cat(2,(linspace(1,1,RowData2))',negdata);
TotalData=cat(1,ExpandData1,-ExpandData2);
[Row,Column]=size(TotalData);

tempflag=sign(TotalData*posw-TotalData*negw);
accuracy_num=length(find(tempflag>0));
accuracy_ratio=accuracy_num/length(tempflag);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

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