fisher判别matlab演示

降维分类。按照最大类间距和最小类内距的思想,对数据进行投影,再将投影点分类

close all;clear all;clc

n0=600;
n1=400;
labels = [zeros(n0,1);ones(n1,1)];
f0=[normrnd(0,1,n0,1),normrnd(1,1,n0,1)];
f1=[normrnd(5,1,n1,1),normrnd(4,1,n1,1)];

%% get projection w
mu0=mean(f0);
mu1=mean(f1);
S0=cov(f0);
S1=cov(f1);
w=(mu1-mu0)/(S1+S0);
w=w/sqrt(w(1)^2+w(2)^2);
%% get threshold
pro0=f0*w';
pro1=f1*w';
thre=mean([pro0;pro1]);
%% visualization
figure;
plot(f0(1:end,1),f0(1:end,2),'bo','MarkerSize',10);
hold on;
plot(f1(1:end,1),f1(1:end,2),'rs','MarkerSize',10);
grid on;
k=-w(1)/w(2);
xx=-.5:0.1:6;
mid=(mu1+mu0)/2;b=mid(2)-k*mid(1);
yy=k*xx+b;
plot(xx,yy,'-.k','LineWidth',2);

figure
plot(1:n0,pro0','cx');
hold on
plot(1:n1,pro1','mx');
grid on
xx=1:max(n1,n0);
yy=thre*ones(1,max(n1,n0));
plot(xx,yy,'-.k','LineWidth',2);

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/white_156/article/details/105230561
今日推荐