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

📄 bayes_fu.m

📁 用MATLAB实现模式识别中的贝叶斯分类
💻 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 + -