实验一 Bayes实验报告

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 Bayes 分类器设计

一、 实验原理

最小风险贝叶斯决策可按下列步骤进行:

(1)在已知)(i P ω,)(i X P ω,i=1,…,c 及给出待识别的X 的情况下,根据贝叶斯公式计算出后验概率: ∑==

c

j i

i

i i i P X P P X P X P 1

)

()()

()()(ωωωωω j=1,…,x

(2)利用计算出的后验概率及决策表,按下面的公式计算出采取i a ,i=1,…,a 的条件风险

∑==

c

j j j

i

i X P a X a R 1

)(),()(ωω

λ,i=1,2,…,a

(3)对(2)中得到的a 个条件风险值)(X a R i ,i=1,…,a 进行比较,找出使其条件风险最小的决策k a ,即

()()1,min k i i a

R a x R a x ==

则k a 就是最小风险贝叶斯决策。

二、 流程图

应用两个特征进行实验

三、 实验结果及分析总结 测试test1结果估计出男生样本的,,女生样本的,

男生:随着男生先验概率的减小,男生被判错的概率呈现增大的趋势。并且,身高170cm以下,体重50至60kg基本判为女生。

女生:随着女生先验概率的增大,女生被判错的概率呈现减小的趋势。

四、程序源代码(Matlab):

function errorRatio=Bayes(data,ma,fe)

%读入两类训练样本数据

female = dlmread('FEMALE.txt');

female = female(:,1:2);

male = dlmread('MALE.txt');

male = male(:,1:2);

%求两类训练样本的均值和方差

favg=mean(female);

mavg=mean(male);

fsig=cov(female);

msig=cov(male);

%对测试样本分类

errorF = 0;

errorM = 0;

test = dlmread(data);

[length,width]=size(test);

for i = 1:length

Pm = mvnpdf(test(i,1:2),mavg,msig) * ma; %p(x|w1)*p(w1)

Pf = mvnpdf(test(i,1:2),favg,fsig) * fe; %p(x|w2)*p(w2)

if Pm > Pf

if (test(i,3) == 2)

errorF = errorF + 1;

end

else

if (test(i,3) == 1)

errorM = errorM + 1;

end

end

end

errorRatio = (errorF+errorM)/length ;

for i = 1:length

if(test(i,3)==1)

plot(test(i,1),test(i,2),'X')

hold on

else

plot(test(i,1),test(i,2),'O')

hold on

end

end

%加标头

title(strcat('男生:X 女生:O'))

xlabel('身高')

ylabel('体重')

%画线

h = 150:0.5:200;

w = 40:0.5:90;

b = [h;w];

a = b';

[x,y] = size(a);

for i = 1 : x

for j = 1 : x

%[a(i,1),a(j,2)]

result = (([a(i,1),a(j,2)]-mavg) * inv(msig) * ([a(i,1),a(j,2)]-mavg)' - ([a(i,1),a(j,2)]-favg) * inv(fsig) * ([a(i,1),a(j,2)]-favg)') + log(det(msig)/det(fsig)) -2*log(ma/fe);

if(result > -0.1 & result < 0.1)

if(ma == 0.5)

plot(a(i,1),a(j,2),'k*')

hold on

elseif(ma == 0.75)

plot(a(i,1),a(j,2),'b*')

hold on

else

plot(a(i,1),a(j,2),'r*')

hold on

end

end

end

end

legend('黑色:男vs 女= 0.5 vs 0.5','蓝色:男vs 女= 0.75 vs 0.15','红色:男vs 女= 0.9 vs 0.1')

相关文档
最新文档