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

📄 test8_9.m

📁 模式识别中的十大经典算法,有详细的实现过程,花了很大工夫,现挥泪上传
💻 M
字号:
function result=test8_9()
clear all
clc
load 'D:/iris.mat'

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

margin=50;
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),:);

    w=[1 linspace(0,0,size(tain_data1,2))];  %投影向量的初始值
    [w,itera(i)]=Preception2(tain_data1,tain_data3,w,1,margin);

    acc(i)=cacul_acc(tain_data1,tain_data3,w);
    acc_ratio(i)=cacul_acc(predict_data1,predict_data3,w);
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 [CoefVector,itera]=Preception1(Data1,Data2,initw,step,b)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% batch Preception algorithm 
%%% increment step length change 
%%% add margin b
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[RowData1,ColumnData1]=size(Data1);
[RowData2,ColumnData2]=size(Data2);
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);

Guard=1;itera=0;
CoefVector=initw;index=1;
while (sum(Guard)&(itera<1000))
    
    itera=itera+1; 
    %CoefVecto=(sum(CoefVector)~=0).*CoefVector./norm(CoefVector,2);
    step=step+itera*0.5;%1/itera;%0.1;
    i=1:1:Row;
    dotarray=diag((repmat(CoefVector,Row,1))*TotalData(i,:)');
    index=find(dotarray<=b);
    if(~isempty(index))
        dd=(repmat(b,length(index),1)-dotarray(index,:))./diag(TotalData(index,:)*TotalData(index,:)');
        sumvector=sum((repmat(dd,1,length(CoefVector)).*TotalData(index,:)),1);
        CoefVector=CoefVector+(step.*sumvector./norm(sumvector,1));
    else
        Guard=0;
    end
end


function [CoefVector,itera]=Preception2(Data1,Data2,initw,step,b)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% sequential Preception algorithm 
%%% increment step length change 
%%% add margin b
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[RowData1,ColumnData1]=size(Data1);
[RowData2,ColumnData2]=size(Data2);
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);

CoefVector=initw;
itera=0;i=1:1:Row;Guard=1;
while (sum(Guard)&(itera<1000))
    Guard=0;
    %CoefVector=(1/norm(CoefVector,2)).*CoefVector;
    step=step+itera*0.5;%1/itera;%0.1;
    for i=1:Row
        dotvalue=dot(CoefVector,TotalData(i,:));
        if (dotvalue<=b)
            dd=(b-dotvalue)/(norm(CoefVector,2)^2);
            CoefVector=CoefVector+(step*dd).*TotalData(i,:);
            Guard=1;itera=itera+1;            
        end
    end
end
   ss=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function accuracy_ratio=cacul_acc(posdata,negdata,w)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%%  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);

i=1:1:Row;
dotarray=sum(repmat(w,Row,1).*TotalData(i,:),2);
accuracy_num=length(find(dotarray>0));
accuracy_ratio=accuracy_num/length(dotarray);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

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