当前位置:文档之家› fisher线性判别matlab代码

fisher线性判别matlab代码

clear
clc
close all;
%m1,m2均为10个样本
% m1=[-0.4,0.58,0.089;-0.31,0.27,-0.04;0.38,0.055,-0.035;-0.15,0.53,0.011;-0.35,0.47,0.034;0.17,0.69,0.1;-0.011,0.55,-0.18];
% m2=[0.83,1.6,-0.014;1.1,1.6,0.48;-0.44,-0.41,0.32;0.047,-0.45,1.4;0.28,0.35,3.1;-0.39,-0.48,0.11;0.34,-0.079,0.14];
% a) 对类别m1,m2,利用fisher原则计算投影方向w
% m1=[0 0 0; 1 0 0; 1 0 2; 1 1 0; 0.5 0 0.5;1 0.5 0;1 0 0.5];
% m2=[0 0 1; 0 1 0; 0 1 1; 1 2 1;0 0.5 1;0 1 0.5; 0.5 1 2;0,1,2;0,1,1.2;0,1.2,1.3;0,0,2;0,1,2.2;1,2,0.5;1,2,0.5;1,2,0];
% m1=[6.3,3.3,6.0;5.8,2.7,5.1;7.1,3.0,5.9;6.3,2.9,5.6;6.5,3.0,5.8;7.6,3.0,6.6;4.9,2.5,4.5;7.3,2.9,6.3;6.7,2.5,5.8;7.2,3.6,6.1;6.5,3.2,5.1;6.4,2.7,5.3;6.8,3.0,5.5;5.7,2.5,5.0;5.8,2.8,5.1;
% 6.4,3.2,5.3;6.5,3.0,5.5;7.7,3.8,6.7;7.7,2.6,6.9;6.0,2.2,5.0;6.9,3.2,5.7;5.6,2.8,4.9;7.7,2.8,6.7;6.3,2.7,4.9;6.7,3.3,5.7;7.2,3.2,6.0;6.2,2.8,4.8;6.1,3.0,4.9;6.4,2.8,5.6;7.2,3.0,5.8;
% 7.4,2.8,6.1;7.9,3.8,6.4;6.4,2.8,5.6;6.3,2.8,5.1;6.1,2.6,5.6;7.7,3.0,6.1;6.3,3.4,5.6;6.4,3.1,5.5;6.0,3.0,4.8;6.9,3.1,5.4;6.7,3.1,5.6;6.9,3.1,5.1;5.8,2.7,5.1;6.8,3.2,5.9;6.7,3.3,5.7;
% 6.7,3.0,5.2;6.3,2.5,5.0;6.5,3.0,5.2;6.2,3.4,5.4;5.9,3.0,5.1];
% m2=[5.1,3.5,1.4;4.9,3.0,1.4;4.7,3.2,1.3;4.6,3.1,1.5;5.0,3.6,1.4;5.4,3.9,1.7;4.6,3.4,1.4;5.0,3.4,1.5;4.4,2.9,1.4;4.9,3.1,1.5;5.4,3.7,1.5;4.8,3.4,1.6;4.8,3.0,1.4;4.3,3.0,1.1;5.8,4.0,1.2;
% 5.7,4.4,1.5;5.4,3.9,1.3;5.1,3.5,1.4;5.7,3.8,1.7;5.1,3.8,1.5;5.4,3.4,1.7;5.1,3.7,1.5;4.6,3.6,1.0;5.1,3.3,1.7;4.8,3.4,1.9;5.0,3.0,1.6;5.0,3.4,1.6;5.2,3.5,1.5;5.2,3.4,1.4;4.7,3.2,1.6;
% 4.8,3.1,1.6;5.4,3.4,1.5;5.2,4.1,1.5;5.5,4.2,1.4;4.9,3.1,1.5;5.0,3.2,1.2;5.5,3.5,1.3;4.9,3.1,1.5;4.4,3.0,1.3;5.1,3.4,1.5;5.0,3.5,1.3;4.5,2.3,1.3;4.4,3.2,1.3;5.0,3.5,1.6;5.1,3.8,1.9;
% 4.8,3.0,1.4;5.1,3.8,1.6;4.6,3.2,1.4;5.3,3.7,1.5;5.0,3.3,1.4;7.0,3.2,4.7;6.4,3.2,4.5;6.9,3.1,4.9;5.5,2.3,4.0;6.5,2.8,4.6;5.7,2.8,4.5;6.3,3.3,4.7;4.9,2.4,3.3;6.6,2.9,4.6;5.2,2.7,3.9;
% 5.0,2.0,3.5;5.9,3.0,4.2;6.0,2.2,4.0;6.1,2.9,4.7;5.6,2.9,3.6;6.7,3.1,4.4;5.6,3.0,4.5;5.8,2.7,4.1;6.2,2.2,4.5;5.6,2.5,3.9;5.9,3.2,4.8;6.1,2.8,4.0;6.3,2.5,4.9;6.1,2.8,4.7;6.4,2.9,4.3;
% 6.6,3.0,4.4;6.8,2.8,4.8;6.7,3.0,5.0;6.0,2.9,4.5;5.7,2.6,3.5;5.5,2.4,3.8;5.5,2.4,3.7;5.8,2.7,3.9;6.0,2.7,5.1;5.4,3.0,4.5;6.0,3.4,4.5;6.7,3.1,4.7;6.3,2.3,4.4;5.6,3.0,4.1;5.5,2.5,4.0;
% 5.5,2.6,4.4;6.1,3.0,4.6;5.8,2.6,4.0;5.0,2.3,3.3;5.6,2.7,4.2;5.7,3.0,4.2;5.7,2.9,4.2;6.2,2.9,4.3;5.1,2.5,3.0;5.7,2.8,4.1];
% m1=[-300,250,0;-500,150,-100;-700,300,0;-450,120,0;-320,-50,0;-600,100,0;0,-90,0];
% m2=[1200,200,0;1800,-350,0;200,0,0;800,100,0;1600,-100,-200;900,100,0;400,-50,-130;300,-100,0;600,270,300;740,0,0;750,0,-200;480,25,30;550,-120,0];
m1=load('data.txt');
m2=load('data2.txt');
u1=mean(m1);%求均值
u2=mean(m2);
%计算类内散度Si和总类内散度Sw
% S1=(m1(1,:)-u1)'*(m1(1,:)-u1)
% S2=(m2(1,:)-u2)'*(m2(1,:)-u2)
% for i=2:7
% S1=S1+(m1(i,:)-u1)'*(m1(i,:)-u1);
% S2=S2+(m2(i,:)-u2)'*(m2(i,:)-u2);
% end
t1=abs(m1);
t2=abs(m2);
t11=min(t1);

t12=min(t2);
t21=max(t1);
t22=max(t2);
e1=min(t11,t12);
e2=max(t21,t22);
[s,i1]=size(m1);
[t,i2]=size(m2);
% [u,k1]=size(p1);
% [v,k2]=size(p2);
One1=ones(s,1);
One2=ones(t,1);
S1=s*(m1-One1*u1)'*(m1-One1*u1);
S2=t*(m2-One2*u2)'*(m2-One2*u2);
Sw=S1+S2;
%变换向量
w=inv(Sw)*(u1-u2)'
%b) 画出投影前的两类样本点和投影线.(即特征向量:各类方差)
x1=m1(1:s,1);y1=m1(1:s,2);z1=m1(1:s,3);
x2=m2(1:t,1);y2=m2(1:t,2);z2=m2(1:t,3);
%subplot(1,2,1);
figure(1)
plot3(x1,y1,z1,'r*',x2,y2,z2,'b*'); %plot3为三维线图

title('原样本分布图');%画出原两类样本点
hold on
x=e1-10:(e1+e2)/100:e2+10;
y=w(2,1)/w(1,1)*x;
z=w(3,1)/w(1,1)*x;
plot3(x,y,z);%画出投影线
legend('第一类样本','第二类样本','投影线',2);
%rotate3D on %鼠标移动可以旋转三维坐标

% c) 画出投影后的两类样本点和投影线
%subplot(1,2,2);
figure(2)
x=e1-10:(e1+e2)/100:e2+10;
y=w(2,1)/w(1,1)*x;
z=w(3,1)/w(1,1)*x;
plot3(x,y,z);%画出投影线
hold on

% 对w1中的点投影
for i=1:s
x1=(m1(i,1)+w(2,1)/w(1,1)*m1(i,2)+w(3,1)/w(1,1)*m1(i,3))/(1+(w(2,1)/w(1,1))^2+(w(3,1)/w(1,1))^2);
y1=w(2,1)/w(1,1)*x1;
z1=w(3,1)/w(1,1)*x1;
plot3(x1,y1,z1,'r*');
X1(i,1)=x1;
X1(i,2)=y1;
X1(i,3)=z1;
end

% 对w2中的点投影
for i=1:t
x2=(m2(i,1)+w(2,1)/w(1,1)*m2(i,2)+w(3,1)/w(1,1)*m2(i,3))/(1+(w(2,1)/w(1,1))^2+(w(3,1)/w(1,1))^2);
y2=w(2,1)/w(1,1)*x2;
z2=w(3,1)/w(1,1)*x2;
plot3(x2,y2,z2,'b*'); title('投影后的样本分布图');
X2(i,1)=x2;
X2(i,2)=y2;
X2(i,3)=z2;
end

for i=1:s
X11(i)=w'*X1(i,:)';
end
for i=1:t

X21(i)=w'*X2(i,:)';
end
M1=mean(X11);
M2=mean(X21);
F=(M1+M2)/2;%分界阈值点
% u=3;
% for i=1:u
% [ai,bi,ci]=input('请输入测试样本点坐标 [x(i) y(i) z(i)]=');
% a=input('请输入测试样本点坐标 x=');
% b=input('请输入测试样本点坐标 y=');
% c=input('请输入测试样本点坐标 z=');
% [a b c]=input('请输入测试样本点坐标');
plot3(a,b,c,'go');
a=(a+w(1,1)/w(1,1)*b+w(3,1)/w(1,1)*c)/(1+(w(2,1)/w(1,1))^2+(w(3,1)/w(1,1))^2);
b=w(2,1)/w(1,1)*a;
c=w(3,1)/w(1,1)*a;
L=[a b c];
exam=w'*L';
if exam>F
plot3(a,b,c,'go');
fprintf('i点属于第一类\n');
else
plot3(a,b,c,'go');
fprintf('i点属于第二类\n');
end
%rotate3D on %鼠标移动可以旋转三维坐标

相关主题
文本预览
相关文档 最新文档