Bayes classifier design

Level 1: Bayesian Theory of Statistical Decisions

x = [-3.9847 -3.5549 -1.2401 -0.9780 -0.7932 -2.8531 
    -2.7605 -3.7287 -3.5414 -2.2692 -3.4549 -3.0752 
    -3.9934 2.8792 -0.9780 0.7932 1.1882 3.0682 
    -1.5799 -1.4885 0.7431 -0.4221 -1.1186 4.2532];
pw = [0.9 0.1];

%% 类条件概率分布正态分布分别为N(e1,a1)N(e2,a2)
e1 = -2; a1 = 0.5;
e2 = 2; a2 = 2;
m = numel(x);
result = zeros(1,m);

%%%%%%%%%% Begin %%%%%%%%%%

%% 计算后验概率 
for i = 1:m
    pw1_x(i) = (pw(1) * normpdf(x(i),e1,a1)) / (pw(1) * normpdf(x(i),e1,a1) + pw(2) * normpdf(x(i),e2,a2));
    pw2_x(i) = (pw(2) * normpdf(x(i),e2,a2)) / (pw(1) * normpdf(x(i),e1,a1) + pw(2) * normpdf(x(i),e2,a2));
end

%% 根据最小误判概率准则进行判决,结果存入result中
for i = 1:m
    if pw1_x(i) > pw2_x(i)
        result(i) = 0;
    else
        result(i) = 1;
    end
end

%%%%%%%%%% End %%%%%%%%%%

fprintf("%4d",result);
fprintf("\n");

Level 2: Bayesian Discriminant Function for Normal Distribution Pattern

pkg load statistics
function GuassianBayesModel(w, p, X)
%%%%%%%%%% Begin %%%%%%%%%%
%%根据给出的样本数据,求各个类的均值
u(:,:,1) = sum(w(:,:,1)) ./ 10;
u(:,:,2) = sum(w(:,:,2)) ./ 10;
u(:,:,3) = sum(w(:,:,3)) ./ 10;
%%求各个类的协方差矩阵
sigma(:,:,1) = cov(w(:,:,1));
sigma(:,:,2) = cov(w(:,:,2));
sigma(:,:,3) = cov(w(:,:,3));
%%构建判别函数,计算点到每个类的马氏距离以及欧氏距离
for i = 1:3;
    P(i) = mvnpdf(X,u(:,:,i),sigma(:,:,i))*p(i);
    md(i) = sqrt((X-u(:,:,i))*inv(sigma(:,:,i))*(X-u(:,:,i))');
    ed(i) = sqrt(sum((X-u(:,:,i)).^2));
end
%%%%%%%%%% End %%%%%%%%%%
%判断样本属于哪个类的概率最高,并显示点到每个类的马氏距离和欧氏距离
maxP = max(P);
result = find(P==maxP);
fprintf("点[%s]关于第1、2、3类的判别函数值分别为:%s %s %s\n",num2str(X),num2str(P(1)),num2str(P(2)),num2str(P(3)));
fprintf("点[%s]到第1、2、3类的马氏距离为:%s %s %s\n",num2str(X),num2str(md(1)),num2str(md(2)),num2str(md(3)));
fprintf("点[%s]到第1、2、3类的欧氏距离为:%s %s %s\n",num2str(X),num2str(ed(1)),num2str(ed(2)),num2str(ed(3)));
fprintf("点[%s]属于第%s类\n",num2str(X),num2str(result));
end
% w1,w2,w3三类散点
w = zeros(10,3,3);
w(:,:,1) = [-5.01 -8.12 -3.68;...
            -5.43 -3.48 -3.54;...
             1.08 -5.52  1.66;...
             0.86 -3.78 -4.11;...
            -2.67  0.63  7.39;...
             4.94  3.29  2.08;...
            -2.51  2.09 -2.59;...
            -2.25 -2.13 -6.94;...
             5.56  2.86 -2.26;...
             1.03 -3.33  4.33];
w(:,:,2) = [-0.91 -0.18 -0.05;...
             1.30 -.206 -3.53;...
            -7.75 -4.54 -0.95;...
            -5.47  0.50  3.92;...
             6.14  5.72 -4.85;...
             3.60  1.26  4.36;...
             5.37 -4.63 -3.65;...
             7.18  1.46 -6.66;...
            -7.39  1.17  6.30;...
            -7.50 -6.32 -0.31];
w(:,:,3) = [ 5.35  2.26  8.13;...
             5.12  3.22 -2.66;...
            -1.34 -5.31 -9.87;...
             4.48  3.42  5.19;...
             7.11  2.39  9.21;...
             7.17  4.33 -0.98;...
             5.75  3.97  6.65;...
             0.77  0.27  2.41;...
             0.90 -0.43 -8.71;...
             3.52 -0.36  6.43];
%设置各类别先验概率
pw = [1/3 1/3 1/3];
%样本矢量
X1 = [1 2 1];
X2 = [5 3 2];
X3 = [0 0 0];
% 调用高斯型Bayes判别函数,输出判别函数值、马氏距离和判别结果
GuassianBayesModel(w,pw,X1);
GuassianBayesModel(w,pw,X2);
GuassianBayesModel(w,pw,X3);

Guess you like

Origin blog.csdn.net/qq_52331221/article/details/129743777