2021-11-11最小错误率的贝叶斯分类matlab实现

1.计算每一类手写数字样品的均值

% -----------------------------
% 计算每一类手写数字样品的均值
% -----------------------------
load('template.mat');
xmeans=zeros(1,25);


%% 计算每一类手写数字样品的均值 

for i = 1:10
    
  %%%%%%%%%% Begin %%%%%%%%%%\
xmeans=mean(pattern(i).feature);
  
  
  %%%%%%%%%% End %%%%%%%%%%
 
 if i==1
    fprintf('%f\n',xmeans(1,1));
  elseif i==10
     fprintf('%f\n',xmeans(1,25));
  end

end

2.计算每一类的协方差矩阵

% -----------------------------
% 计算每一类的协方差矩阵
% -----------------------------
load('template.mat');
m=zeros(25,25); %协方差矩阵
invm=zeros(25,25);%协方差矩阵的逆矩阵

%% 计算每一类的协方差矩阵

for i = 1:10

  %%%%%%%%%% Begin %%%%%%%%%%
  %计算协方差矩阵m

m=cov(pattern(i).feature);

  %计算协方差矩阵的逆矩阵invm

invm=pinv(m);

  %计算协方差矩阵的行列式detm

detm=det(invm);

  %%%%%%%%%% End %%%%%%%%%%
  if i==1
     fprintf('%f\n',m(1,1)); 
  elseif i==10
      fprintf('%f\n',invm(1,1))
  end
end

3.实现基于最小错误率贝叶斯分类的手写数字识别

% --------------------------------------------------------------------
% 最小错误概率的Bayes方法
% --------------------------------------------------------------------

load('template.mat');
img=imread('untitled.bmp');%读入测试样本
feature=Getfeature(img);%提取测试样本的特征
x = zeros(1,25);    %待测样品
xmeans = zeros(1,25);   %样品的均值
m = zeros(25,25);   %协方差矩阵
invm =zeros(25,25);   %m的逆矩阵
pw = zeros(1,10);    %先验概率P(wj)=n(i)/N
hx = zeros(1,10);   %判别函数
t = zeros(1,25);
N = 0;

% 求先验概率
for i = 1:10
    N = N+pattern(i).num;  %样品总数
end
for i = 1:10
    pw(i) = pattern(i).num/N;
end

for n = 1:10
    pnum = pattern(n).num;
   %训练样本特征二值化 
    for k = 1:pnum
       for i = 1:25
            if pattern(n).feature(k,i)>0.1
               pattern(n).feature(k,i) = 1;
            else
               pattern(n).feature(k,i) = 0;
            end
        end
    end

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

    %求样品平均值
    xmeans=mean(pattern(n).feature);
  
    %求协方差矩阵m
    m=cov(pattern(n).feature);

    %求m的逆矩阵invm
   
    invm=pinv(m);
    %求m的行列式detm
    detm=det(invm);


    % 测试样本特征二值化
    for i = 1:25
        if feature(i)>0.1
            x(i) = 1;
        else
            x(i) = 0;
        end
     end
    
   % 求判别函数hx
    for i=1:25
    x(i)=x(i)-xmeans(i);
    end
    t=x*invm;
    t1=t*x';
    t2=log(pw(n));
    t3=log(detm+1);
    hx(n)=-t1/2+t2-t3/2;


end

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

[tem,num] = max(hx);    %找到其中的最大值
num = num-1;
str = num2str(num);
str = ['应用最小错误率的Bayes方法识别结果:' str];
fprintf('%s\n',str);
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

happylife_mini

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值