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

📄 homework3_pca.m

📁 这是一个利用MATLAB利用PCA实现的简单分类程序
💻 M
字号:
clear all;
%PCA判决法,仿照书上的例题做的,样本分开求均值和协方差,然后求以概率合并的协方差的特征值
M = load('E:\研究生课程\模式识别课程\homework1_1007\FEMALE.TXT');
N = load('E:\研究生课程\模式识别课程\homework1_1007\MALE.TXT');
%先验概率
pw1=0.5;%女生
pw2=0.5;%男生
m1=mean(M);
m2=mean(N);
s1=cov(M);
s2=cov(N);
M=M';
N=N';
%绘图

% plot(M(1,:),M(2,:),'r+')
% hold on
% plot(N(1,:),N(2,:),'g*')
% xlabel('身高')
% ylabel('体重')
% title('女生是红色+男生是绿色* ')

%计算最佳投影方向w
m1=m1';
m2=m2';
s1=s1';
s2=s2';
Sw=pw1*s1+pw2*s2;


[A,U]=eig(Sw) ; % A是特征向量U是特征值对角阵
lamuda1=U(1,1);
lamuda2=U(2,2);
p1=A(:,1);
p2=A(:,2);
Sb=pw1*(m1*m1')+pw2*(m2*m2');
Jx1=(m1'*Sb*m1)/U(1,1);
Jx2=(m2'*Sb*m2)/U(2,2);
w=p2;
u1=w'*m1;
u2=w'*m2;
threshold=(50*u1+50*u2)/100; 

%把test1.txt的值读出来,放如数组[a1,a2,a3]中进行测试
[a1,a2,a3]=textread('E:\研究生课程\模式识别课程\homework1_1007\test1.TXT','%d %d %c',35);
right=0;
wrong=0;
a=[a1,a2];
%画分类线
x=a(:,1);
w1=w(1,1);
w2=w(2,1);
y=(threshold-w1*x)/w2;
plot(x,y);
text(150,30,'该线为PCA计算出来的最佳投影方向');
hold on
a=a';
for i=1:35
   test=a(:,i);
   if(i<=20)
   plot(a(1,i),a(2,i),'b*');
   else
   plot(a(1,i),a(2,i),'r+') ;  
   end
  gx=w'*test;
  if(gx>threshold)
    result='f';
  else
    result='m';
 end
 if(strcmp(a3(i,1),result)==1)
     right=right+1;
 elseif(strcmp(a3(i,1),result)==0)
     wrong=wrong+1;
 end
     
end
right=right/35
wrong=wrong/35
%先验概率为0.5对0.5,阈值取p90页公式4-34正确分类的的概率是 100%错误分类的结果是0%






⌨️ 快捷键说明

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