%设置空矩阵存放每一次的正确率
C=[];
%sum统计correct算综合平均正确率
sum=0
for j=1:100
%导入sonar数据集
A=xlsread('C:\Users\泠泠\Desktop\模式识别第一次大作业\sonar.all-data.csv','A1:BH208');
%两类数据
A_1=A(1:97,1:60);
A_2=A(98:208,1:60);
%随机产生训练集
S1=size(A_1,1);
SampleRows1=randperm(S1);
SampleRows1=SampleRows1(1:49);
A_1_study=A_1(SampleRows1,:);
S2=size(A_2,1);
SampleRows2=randperm(S2);
SampleRows2=SampleRows2(1:55);
A_2_study=A_2(SampleRows2,:);
%剩余数据放入测试集
A_1_text=setdiff(A_1,A_1_study,'rows');
A_2_text=setdiff(A_2,A_2_study,'rows');
%各类样本均值向量
m1=mean(A_1_study,1);
m2=mean(A_2_study,1);
%样本类内离散度矩阵
s1=zeros(60);
s2=zeros(60);
for i=1:1:size(A_1_study)
s1=s1+(A_1_study(i,:)-m1)'*(A_1_study(i,:)-m1);
end
for i=1:1:size(A_2_study)
s2=s2+(A_2_study(i,:)-m2)'*(A_2_study(i,:)-m2);
end
%样本类内离散度矩阵
sw=s1+s2;
%最佳投影方向
w=((sw^(-1))*(m1-m2)')';
%阈值
w0=0.5*(w*m1'+w*m2');
%定义两类别计数
firstkind=0;
secondkind=0;
B_1=[];
B_2=[];
%分类投影
for i=1:size(A_1_text)
x=A_1_text(i,:);
g=w*x'-w0;
if(g>0)
B_1=[B_1;x];
firstkind=firstkind+1;
else
B_2=[B_2;x];
end
end
for i=1:size(A_2_text)
x=A_2_text(i,:);
g=w*x'-w0;
if(g>0)
B_1=[B_1;x];
else
B_2=[B_2;x];
secondkind=secondkind+1;
end
end
%正确率
[m1,n1]=size(A_1_text);
[m2,n2]=size(A_2_text);
n=m1+m2;
correct=(firstkind+secondkind)/n;
fprintf('\n正确率:%.2f%%\n\n',correct*100);
C=[C;correct];
sum=sum+correct;
end
%综合平均正确率
correcttotal=sum/j;
fprintf('\n综合平均正确率:%.2f%%\n\n',correcttotal*100);
%打开图形窗口
figure;
%绘制多图
hold on;
%绘制第一类样本
p=C;
q=j;
plot(p);
axis([-inf,inf,0 1])
grid on;
hold off;
评论0