📄 fisher.m
字号:
% Fisher线性判别
clc
clear
MALE = load('male.txt');
FEMALE = load('female.txt');
MALE=MALE(:,1:2);
FEMALE=FEMALE(:,1:2);
m1 = mean(MALE)'; % 各类样本均值向量
si1 = cov(MALE)*49; % 样本类内离散度矩阵
cov1 = si1/50;
m2 = mean(FEMALE)'; % 各类样本均值向量
si2 = cov(FEMALE)*49; % 样本类内离散度矩阵
cov2 = si2/50;
sw = si1 + si2; % 总类内离散度矩阵
w = (inv(sw)*(m1-m2))'; % 最佳投影权向量
% 利用先验知识选定分界阈值点
my1 = mean(w*MALE');
my2 = mean(w*FEMALE');
y0 = (my1+my2)/2;
TEST1 = load('test1.txt');
C1 = TEST1(:,3)';
for i = 1:1:35
x = TEST1(i,1:2)';
y = w*x;
if (y>y0)
A1(i) = 0;
else
A1(i) = 1;
end;
end;
D1 = A1-C1;
nnz(D1(:,1:20))
nnz(D1(:,21:35))
% nnz(D1)
TEST2 = load('test2.txt');
C2 = TEST2(:,3)';
for i = 1:1:300
x = TEST2(i,1:2)';
y = w*x;
if (y>y0)
A2(i) = 0;
else
A2(i) = 1;
end;
end;
D2 = A2-C2;
nnz(D2(:,1:50))
nnz(D2(:,51:300))
% nnz(D1)
TEST3 = load('test3.txt');
C3 = TEST3(:,3)';
for i = 1:1:100
x = TEST3(i,1:2)';
y = w*x;
if (y>y0)
A3(i) = 0;
else
A3(i) = 1;
end;
end;
D3 = A3-C3;
nnz(D3(:,1:50))
nnz(D3(:,51:100))
% nnz(D3)
% px1 = TEST1(:,1);
% px2 = TEST1(:,2);
% plot(px1,px2,'*')
hold on
plot(MALE(:,1),MALE(:,2),'*')
plot(FEMALE(:,1),FEMALE(:,2),'O')
clear('x','y')
ezplot('-1260363355495563558841/144115188075855872000*x+509187399542439477641/144115188075855872000*y+509187399542439303721/144115188075855872000*y-1260363355495563493339/144115188075855872000*x+19145177403164224521564687/14411518807585587200000-10739685055000093/576460752303423488*x*y+8151688554223755/144115188075855872*x^2-10739685055000097/576460752303423488*y*x-2832113983076773/288230376151711744*y^2',[140,190],[30,100])
lx1 = 140:10:190;
lx2 = (y0-w(1)*lx1)/w(2);
plot(lx1,lx2,'r')
xlabel('身高'),ylabel('体重')
title('训练样本和求得的决策边界')
grid on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -