📄 bayes_fu.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [] = Bayes_fu;
u_c1=[1 2;5 3]; %u_c - 2xM matrix, mean of the gaussians in the distribution
covar1=[4 0; 0 6];
covar1(:,:,2)=[5 0;0 1]; %covar_c - 2x2xM matirx, covariance of the gaussians
p_c1=[4 6] ; %p_c - 1xM vector, ratio between the gaussians in the distribution
N1=1000;
disp('画出第一类数据.');
input('<press enter>');
[X1,N1] = build_mix_2D_gaussian( u_c1,covar1,p_c1,N1 );
%
u_c2=[6 3;9 10]; %u_c - 2xM matrix, mean of the gaussians in the distribution
covar2=[2 0; 0 2];
covar2(:,:,2)=[2 0;0 2]; %covar_c - 2x2xM matirx, covariance of the gaussians
p_c2=[3 7] ; %p_c - 1xM vector, ratio between the gaussians in the distribution
N2=2000;
disp('画出第二类数据.');
input('<press enter>');
[X2,N2] = build_mix_2D_gaussian( u_c2,covar2,p_c2,N2 );
P(1)=N1/(N1+N2);
P(2)=N2/(N1+N2);
%FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
%画出两类混合数据的图形
PX=[0.4*1/3 0.6*1/3 0.3*2/3 0.7*2/3];
X=vertcat(X1,X2)';
u=horzcat(u_c1,u_c2);
covarX=[4 0; 0 6];
covarX(:,:,2)=[5 0;0 1];
covarX(:,:,3)=[2 0; 0 2];
covarX(:,:,4)=[2 0;0 2];
disp('两类混合数据的图形.');
input('<press enter>');
plot_mix_gaussian(u,covarX,PX,X);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%---------下面的程序采用普通BAYES对两类数据分别进行判别
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Ave1=(sum(X1))/length(X1);
Ave2=(sum(X2))/length(X2);
Cov1=cov(X1);
Cov2=cov(X2);
invCov1=inv(Cov1);
invCov2=inv(Cov2);
ResultByes(1:2,1:2)=0;
for i=1:2
if i==1
for j=1:N1
f11=-1/2*(X1(j,:)'-Ave1(1,:)')'*invCov1*(X1(j,:)'-Ave1(1,:)');
f22=-1/2*(X1(j,:)'-Ave2(1,:)')'*invCov2*(X1(j,:)'-Ave2(1,:)');
g11=(1/((2*pi)^(1/2))*sqrt(det(Cov1))*exp(f11))*P(1);
g21=(1/((2*pi)^(1/2))*sqrt(det(Cov2))*exp(f22))*P(2);
if g11>=g21
ResultByes(1,1)=ResultByes(1,1)+1;
else
ResultByes(1,2)=ResultByes(1,2)+1;
end
end
elseif i==2
for j=1:N2
f11=-1/2*(X2(j,:)'-Ave1(1,:)')'*invCov1*(X2(j,:)'-Ave1(1,:)');
f22=-1/2*(X2(j,:)'-Ave2(1,:)')'*invCov2*(X2(j,:)'-Ave2(1,:)');
g11=(1/((2*pi)^(1/2))*sqrt(det(Cov1))*exp(f11))*P(1);
g21=(1/((2*pi)^(1/2))*sqrt(det(Cov2))*exp(f22))*P(2);
if g11>=g21
ResultByes(2,1)=ResultByes(2,1)+1;
else
ResultByes(2,2)=ResultByes(2,2)+1;
end
end
end
end
disp(['第一类数据判别为第一类的准确率为:' ]);
ACC1= ResultByes(1,1)/(ResultByes(1,1)+ResultByes(1,2))
disp(['第二类数据判别为第二类的准确率为:']);
ACC2= ResultByes(2,2)/(ResultByes(2,1)+ResultByes(2,2))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -