📄 test5_6.m
字号:
function result=test5_6()
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_index2 = p1(1,1:m);
train_data2 = Iris(train_index2,:);
predict_data2=Iris(setdiff(p1,train_index2),:);
p3 = randperm(50)+100;
train_index3=p3(1,1:m);
train_data3 = Iris(train_index3,:);
predict_data3=Iris(setdiff(p3,train_index3),:);
w=[1 linspace(0,0,size(train_data3,2))]; %投影向量的初始值
[w,itera(i)]=Preception2(train_data2,train_data3,w,1,margin);
acc(i)=cacul_acc(train_data2,train_data3,w);
acc_ratio(i)=cacul_acc(predict_data2,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;
step=step+itera*0.5;%1/itera;%0.1;
i=1:1:Row;
dotarray=sum(repmat(CoefVector,Row,1).*TotalData(i,:),2);
index=find(dotarray<=b);
if(~isempty(index))
sumvector=sum(TotalData(index,:),1);
CoefVector=CoefVector+step.*((sum(sumvector)~=0).*sumvector./norm(sumvector));
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;
step=step+itera*0.5;%1/itera;%0.1;
for i=1:Row
if dot(CoefVector,TotalData(i,:))<=b;
CoefVector=CoefVector+step.*TotalData(i,:);
Guard=1;itera=itera+1;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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 + -