实验三 最小错误率的贝叶斯分类
一、实验题目
利用贝叶斯后验概率确定分类:
设有19人进行体检,结果如下表。但事后发现4人忘了写性别,试问,这4人是男是女?
二、实验代码
clc;clear;
male_data = importdata('male.txt');
female_data = importdata('female.txt');
male_avr = mean(male_data);
female_avr = mean(female_data);
pw1_1 = 10/15; pw2_1 = 1-pw1_1;
% 协方差矩阵
juzhen_male = cov(male_data); juzhen_male_det = det(juzhen_male);
juzhen_male_ni = juzhen_male^(-1);
juzhen_female = cov(female_data);juzhen_female_det = det(juzhen_female);
juzhen_female_ni = juzhen_female^(-1);pw1_1 = 10/15; pw2_1 = 1-pw1_1;%根据样本的数据算出来的%读test2
test2 = fopen('test2.txt');
T2=textscan(test2,'%d%d%s','Delimiter',{':',';'});
fclose(test2);
test2_H=double([T2{1,1}]);
test2_W=double([T2{1,2}]);
man_woman = char([T2{1,3}]);
hei_wei = [test2_H,test2_W];
PXk_W1 = zeros(1,300);
PXk_W2 = zeros(1,300);
error =0;num_woman = 0;num_man = 0;
% 红色代表女的,蓝色代表男的 如果判断错了,弄成黑色星号
figure(1);
for i = 1:300
if(man_woman(i)=='F')
num_woman = num_woman +1;
plot(test2_H(i),test2_W(i),'r.');
else
num_man = num_man +1;
plot(test2_H(i),test2_W(i),'b.');
end
hold on;
PXk_W1(i) = 1/sqrt(4*pi*pi*juzhen_male_det)*exp(-0.5*(hei_wei(i,:)-male_avr)*juzhen_male_ni* (hei_wei(i,:)-male_avr)' );
PXk_W2(i) = 1/sqrt(4*pi*pi*juzhen_female_det)*exp(-0.5*(hei_wei(i,:)-female_avr)*juzhen_female_ni* (hei_wei(i,:)-female_avr)' );
PW1_Xi = PXk_W1(i)*pw2_1;
PW2_Xi = PXk_W2(i)*pw1_1;
if(PW1_Xi>PW2_Xi)
fprintf('第 %d个是男的\n',i);
if(man_woman(i)=='F')
error = error+1;
plot(test2_H(i),test2_W(i),'k*');
end
else
fprintf('第 %d个是女的\n',i);
if(man_woman(i)=='M')
error= error+1;
plot(test2_H(i),test2_W(i),'k*');
end
end
end
fprintf('共测试了%d个数据\r男性为%d 女性为%d\r',length(man_woman),num_man,num_woman)
fprintf(' test2\n ')
fprintf('总 数 %5d\n ',length(man_woman))
fprintf('男 性 %5d\n ',num_man)
fprintf('女 性 %5d\n ',num_woman)