📄 fisher.m
字号:
close all
clear all
p1=0.6; % 第一类OMGA1数据的先验概率
p2=0.4; % 第二类OMGA2数据的先验概率
% OMGA1中数据点的三维坐标数据
x =[
0.2331 1.5207 0.6499 0.7757 1.0524 1.1974...
0.2908 0.2518 0.6682 0.5622 0.9023 0.1333...
-0.5431 0.9407 -0.2126 0.0507 -0.0810 0.7315...
0.3345 1.0650 -0.0247 0.1043 0.3122 0.6655...
0.5838 1.1653 1.2653 0.8137 -0.3399 0.5152...
0.7226 -0.2015 0.4070 -0.1717 -1.0573 -0.2099];
y =[
2.3385 2.1946 1.6730 1.6365 1.7844 2.0155...
2.0681 2.1213 2.4797 1.5118 1.9692 1.8340...
1.8704 2.2948 1.7714 2.3939 1.5648 1.9329...
2.2027 2.4568 1.7523 1.6991 2.4883 1.7259...
2.0466 2.0226 2.3757 1.7987 2.0828 2.0798...
1.9449 2.3801 2.2373 2.1614 1.9235 2.2604];
z =[
0.5338 0.8514 1.0831 0.4164 1.1176 0.5536...
0.6071 0.4439 0.4928 0.5901 1.0927 1.0756...
1.0072 0.4272 0.4353 0.9869 0.4841 1.0992...
1.0299 0.7127 1.0124 0.4576 0.8544 1.1275...
0.7705 0.4129 1.0085 0.7676 0.8418 0.8784...
0.9751 0.7840 0.4158 1.0315 0.7533 0.9548];
% OMGA2中数据点的三维坐标数据
x2 =[
1.4010 1.2301 2.0814 1.1655 1.3740 1.1829...
1.7632 1.9739 2.4152 2.5890 2.8472 1.9539...
1.2500 1.2864 1.2614 2.0071 2.1831 1.7909...
1.3322 1.1466 1.7087 1.5920 2.9353 1.4664...
2.9313 1.8349 1.8340 2.5096 2.7198 2.3148...
2.0353 2.6030 1.2327 2.1465 1.5673 2.9414];
y2 =[
1.0298 0.9611 0.9154 1.4901 0.8200 0.9399...
1.1405 1.0678 0.8050 1.2889 1.4601 1.4334...
0.7091 1.2942 1.3744 0.9387 1.2266 1.1833...
0.8798 0.5592 0.5150 0.9983 0.9120 0.7126...
1.2833 1.1029 1.2680 0.7140 1.2446 1.3392...
1.1808 0.5503 1.4708 1.1435 0.7679 1.1288];
z2 =[
0.6210 1.3656 0.5498 0.6708 0.8932 1.4342...
0.9508 0.7324 0.5784 1.4943 1.0915 0.7644...
1.2159 1.3049 1.1408 0.9398 0.6197 0.6603...
1.3928 1.4084 0.6909 0.8400 0.5381 1.3729...
0.7731 0.7319 1.3439 0.8142 0.9586 0.7379...
0.7548 0.7393 0.6739 0.8651 1.3699 1.1458];
sample1=[x;y;z];
% OMGA1类样本 每一列为一组坐标(x,y,z)
sample2=[x2;y2;z2];
% OMGA2类样本 每一列为一组坐标(x2,y2,z2)
m1=mean(sample1,2); % OMGA1类样本值的均值向量
m2=mean(sample2,2); % OMGA2类样本值的均值向量
s1=zeros(size(sample1,1));
N1=length(x); % OMGA1类样本的长度
for k=1:N1
s1=s1+(sample1(:,k)-m1)*(sample1(:,k)-m1)';
end
%建立OMGA1类的样本类内离散度矩阵
s2=zeros(size(sample2,1));
N2=length(x2); % OMGA2类样本的长度
for j=1:N2
s2=s2+(sample2(:,j)-m2)*(sample2(:,j)-m2)';
end
%建立OMGA2类的样本类内离散度矩阵
% 总类内离散度矩阵
sw=p1*s1+p2*s2;
w=(sw)^(-1)*(m1-m2);
% 决策面的法向量,最佳投影方向
t=[-10:0.1:10];
xt=w(1)*t;
yt=w(2)*t;
zt=w(3)*t;
plot3(xt,yt,zt,'g');% 投影直线
hold on
mf1=w'*m1; % OMGA1类样本的均值
mf2=w'*m2; % OMGA1类样本的均值
w0=(mf1+mf2)/2-log(p1/p2)/(N1+N2-2);%最佳线性分界面的确定
for ii=1:size(sample1,2) %OMGA1类样本中所有的样本点的位置
plot3(sample1(1,ii),sample1(2,ii),sample1(3,ii),'r*')
end
for ii=1:size(sample2,2) % OMGA2类样本中所有的样本点的位置
plot3(sample2(1,ii),sample2(2,ii),sample2(3,ii),'b*')
end
Tb=[1.0000 1.2000 2.0000 1.2000 0.2300;
1.5000 1.0000 0.9000 1.5000 2.3300;
0.6000 0.5500 0.6800 0.8900 1.4300;];
% 待测数据,判断每一列数据即给定的坐标点属于哪一类
point=find_projection(w,Tb);
% 寻找待测样本点的投影
grid on
for ii=1:size(Tb,2)
if w'*Tb(:,ii)>w0 % 将其判为OMGA1类并标出其位置及投影点
plot3(Tb(1,ii),Tb(2,ii),Tb(3,ii),'g+') %用+来表示OMGA1类的位置
plot3(point(1,ii),point(2,ii),point(3,ii),'go')%用o来表示OMGA1类的投影点
else % 将其判为OMGA2类并标出其位置及投影点
plot3(Tb(1,ii),Tb(2,ii),Tb(3,ii),'y+')%用+来表示OMGA2类的位置
plot3(point(1,ii),point(2,ii),point(3,ii),'yo')%用o来表示OMGA2类的投影点
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -