通过贝叶斯分类器预测精度

贝叶斯分类器预测精度—以COVID-19数据集为例

在此数据集下的贝叶斯公式,一般形式:在这里插入图片描述
其中,0代表普通肺炎患者;1代表COVID-19 患者。
假设1,x服从正态分布,
在这里插入图片描述
此时,贝叶斯分类器变为高斯贝叶斯分类器:
在这里插入图片描述
假设2,
在这里插入图片描述
此时变为朴素贝叶斯分类器:
在这里插入图片描述
既有假设1,又有假设2,最终得到高斯朴素贝叶斯分类器:
在这里插入图片描述
通过比较
在这里插入图片描述
来判断x是普通肺炎患者还是COVID-19患者。为了简便计算,在可将上式同时取对数变为
在这里插入图片描述
其中,令
在这里插入图片描述
代码实现:
myGaussinBayes.m

%数据集分别为X、Y,X是2685×189的样本,Y是2685×1的类标号,0代表普通肺炎,1代表新冠肺炎
function [Pred_lab] = myGaussinBayes(Train_dat,Train_lab,Test_dat)
 
[nTest,nFea]=size(Test_dat);%测试集的行和列
Pred_lab=zeros(nTest,1);
idx0=find(Train_lab==0); %训练集中普通肺炎人数
idx1=find(Train_lab==1); %训练集中新冠肺炎人数
p0=length(idx0)/length(Train_lab);%普通肺炎的概率
p1=1-p0;%新冠肺炎的概率
u1=mean(Train_dat(idx1,:))';%训练集中新冠肺炎的均值
u0=mean(Train_dat(idx0,:))';%训练集中普通肺炎的均值
s0=std(Train_dat(idx0,:))';%普通肺炎的方差
s1=std(Train_dat(idx1,:))';%新冠肺炎的方差
 
for i = 1:nTest
    x=Test_dat(i,:)';
    prob0=log(p0)-log(det(diag(s0)))-0.5*sum(((x-u0)./s0).^2);
    prob1=log(p1)-log(det(diag(s1)))-0.5*sum(((x-u1)./s1).^2);
    if prob0>=prob1
        preL=0;
    else
        preL=1;
    end
    Pred_lab(i)=preL;
end

GaussinBayes.m

clear;clc;
load('COVID19.mat')  
nFold = 5;
[n,p] = size(X);      % n is the number of samples
c_out = cvpartition(n,'k',nFold);%k折交叉验证,此处是五折交叉验证
Acc=zeros(nFold,1);
for k = 1:nFold
    Train_dat = X(training(c_out,k),:);  %用于训练的数据
    Train_lab = Y(training(c_out,k));    %训练数据的类标号
    Test_dat = X(test(c_out,k),:);         %用于测试的数据
    Test_lab = Y(test(c_out,k));            %测试数据的类标号
    Pred_lab = myGaussianBayes(Train_dat,Train_lab,Test_dat);
    Acc(k)=length(find(Test_lab-Pred_lab==0))/length(Test_lab);%当前折数的精度
end
    mean(Acc)%最终的精度

最终的结果精度在0.77左右。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值