Matlab statistical analysis--discriminant analysis algorithm model

Statistical Analysis – Discriminant Analysis Algorithmic Model

Model summary

insert image description here

MATLAB中有一个命令:
d= mahal(Y,X) 计算X矩阵每一个点(行)至Y矩阵中每一个点(行)的马氏距离。
其中: Y的列数必须等于X的列数,但它们的行数可以不同。X的行数必须大于列数。输出d:  d是距离向量。

distance discriminant analysis

insert image description here
insert image description here

Discriminant analysis of distance between two populations

example

insert image description here

1. The overall covariance matrix is ​​equal
insert image description here
insert image description here

apf =  [1.14,1.78;1.18,1.96;1.20,1.86;1.26,2.;1.28,2;1.30,1.96];
af  = [1.24,1.72;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
x = [1.24,1.8;1.28,1.84; 1.4,2.04]; 
%输入原始待判别数据
m1 = mean( apf ); m2 = mean( af ); % 计算样本均值
s1 =  cov(apf); s2 =  cov(af); %  协方差矩阵
%计算总体的协方差矩阵
s = ((length(apf)-1)*s1+(length(af)-1)*s2)/(length(af)+length(apf)-2);
for i=1:length(x)
    %计算判别函数值
    W(i)=(x(i,:)-1/2*(m1+m2))* inv(s)*(m1-m2)';
end   
disp(['判别函数值:',num2str(W)])


plot(apf(:,1),apf(:,2),'rh');
hold on
plot(af(:,1),af(:,2),'bp');
plot(x(:,1),x(:,2),'ko','MarkerFaceColor','y');
apfm  = mean(apf);


plot( apfm (1), apfm(2),'r*','LineWidth',2);
afm = mean(af);
plot( afm (1), afm(2),'b*','LineWidth',2)
legend('apf','af','待判断X','apf均值','af均值')
legend('boxoff')
title('判别分析 距离判别分析 测试案例 协方差矩阵相同的效果')

2. Population covariance matrices are not equal
insert image description here
insert image description here

apf =  [1.14,1.78;1.18,1.96;1.20,1.86;1.26,2.;1.28,2;1.30,1.96];
af  = [1.24,1.72;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
x = [1.24,1.8;1.28,1.84; 1.4,2.04]; 
W = mahal(x,apf)-mahal(x,af) %  计算判别函数


plot(apf(:,1),apf(:,2),'rh');
hold on
plot(af(:,1),af(:,2),'bp');
plot(x(:,1),x(:,2),'ko','MarkerFaceColor','y');
apfm  = mean(apf);


plot( apfm (1), apfm(2),'r*','LineWidth',2);
afm = mean(af);
plot( afm (1), afm(2),'b*','LineWidth',2)
legend('apf','af','待判断X','apf均值','af均值')
legend('boxoff')
title('判别分析 距离判别分析 测试案例 协方差矩阵不同的效果')

The difference between the two cases

insert image description here

p=2; alpha  = 0.05;
Q01 = (n1-1)*(log(det(s))-log(det(s1))-p+trace(inv(s)*s1));
Q02 = (n2-1)*(log(det(s))-log(det(s2))-p+trace(inv(s)*s2));
lamda  = chi2inv(1-alpha,3);
if Q01<lamda  && Q02<lamda
disp(' 两总体协方差矩阵相同) .')
end

Guess you like

Origin blog.csdn.net/weixin_43599390/article/details/131358224