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

📄 fisher.m

📁 基于Fisher准则线性分类器设计
💻 M
字号:
clear all;
close all;

%两类数据的概率
p1 = 0.6;
p2 = 0.4;
d = 3;%样本点的维数;
%各样本点;
load 'D:\fisher\x11.txt';% w1中各样本点的X坐标
load 'D:\fisher\x12.txt';% w1中各样本点的Y坐标
load 'D:\fisher\x13.txt';% w1中各样本点的Z坐标
x11 = reshape(x11,1,[]);  % 把X坐标化为1行N1列的矩阵
x12 = reshape(x12,1,[]);
x13 = reshape(x13,1,[]);
N1 = 36; %1类样本点有N1个;
X1 = zeros(N1,d);
for i=1:N1
    X1(i,:) = [x11(i),x12(i),x13(i)]; %矩阵X1的每一行代表一个三维的样本点;
end
%求样本均值向量 mi
m1 = mean(X1)'; %对X1按列求平均,得到1类样本均值向量(3*1的列向量);
load 'D:\fisher\x21.txt'; % w2中各样本点的X坐标
load 'D:\fisher\x22.txt'; % w2中各样本点的Y坐标
load 'D:\fisher\x23.txt'; % w2中各样本点的Z坐标

x21 = reshape(x21,1,[]);
x22 = reshape(x22,1,[]);
x23 = reshape(x23,1,[]);
N2 = 36;%2类样本点个数;
X2 = zeros(N2,d);
for i=1:N2
    X2(i,:) = [x21(i),x22(i),x23(i)]; %矩阵X2的每一行代表一个三维的样本点;
end
%dlmwrite('sample.txt',X1);
%dlmwrite('sample.txt',X2,'-append');
dlmwrite ('sample1.txt',X1);%把变换得到的样本点保存在文件中
dlmwrite ('sample2.txt',X2);
m2 = mean(X2)'; %对X2按列求平均,得到2类样本均值向量(3*1的列向量);
figure(2);
plot3(X1(:,1),X1(:,2),X1(:,3),'+r',m1(1),m1(2),m1(3),'.b',X2(:,1),X2(:,2),X2(:,3),'*r',m2(1),m2(2),m2(3),'.g');
grid on;

%样本类内离散度矩阵Si与总类内离散度矩阵Sw 
S1 = zeros(3); %S1为3*3的矩阵
for i=1:N1
    S1 = S1 + (X1(i,:)'-m1) * (X1(i,:)'-m1)'; %X1(i,:)为1类样本的第I个点,3维行向量;
end
S2=zeros(3);%S2为3*3的矩阵
for i=1:N2
    S2 = S2 + (X2(i,:)'-m2) * (X2(i,:)'-m2)';
end
Sw = S1 + S2;

W = inv(Sw) * (m1-m2); %最佳W值的确定,W为3*1的列向量
display('最佳的W为:');
display(W);

M1 = W' * m1; %一维Y空间各类样本均值
M2 = W' * m2;
w0 = -((M1+M2)/2)-(log(p1/p2))/(N1+N2-2) %P(w1)与P(w2)已知时,w0的确定

load  'D:\fisher\test.txt'; %输入的测试数据text为矩阵,每一行代表一个三维样本点;
%load  D:\fisher\sample.txt';
%test = sample;
Y = test*W  + w0; %Y为一判决向量
a1 = find (Y>0); %分类
a2 = find (Y<=0);

figure(1)
shad1 = shadow(W,test(a1,:)'); %1类的各点在W上的投影向量
shad2 = shadow(W,test(a2,:)'); %2类的各点在W上的投影向量
shad =  shadow(W,test');
plot3(test(a1,1),test(a1,2),test(a1,3),'*r');%画出1类点
hold on
plot3(test(a2,1),test(a2,2),test(a2,3),'+b');%画出2类点
hold on
plot3(shad1(1,:),shad1(2,:),shad1(3,:),'ro');%画出1类点在W上的投影向量
hold on
plot3(shad2(1,:),shad2(2,:),shad2(3,:),'bo');%画出2类点在W上的投影向量
hold on
plot3(shad(1,:),shad(2,:),shad(3,:),'y');%画出向量W
legend('第一类','第二类','一类投影','二类投影','W');
grid on;
hold off;






⌨️ 快捷键说明

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