📄 parzen.m
字号:
%Parzen窗非参数估计
clear all;
load FEMALE.txt;
load MALE.txt;
%样本的描述
PreFp=0.5; %女生先验概率
PreMp=0.5; %男生先验概率
FemaleNcount=0; %计数器
MaleNcount = 0;
Ncount = 0;
Hn = 2.37; %方窗窗宽
Kn = sqrt(50);
PrazenFemaleProk = zeros(2,50);
PrazenMaleProk = zeros(2,50);
fid=fopen('test1.txt','r');
TEST1=fscanf(fid,'%f %f %c',[3,inf]);
TEST=TEST1';
fclose(fid);
figure(1);
for i=1:35
for j = 1:50
PrazenFemaleProk(1,j) =1/sqrt(2*pi)*exp(-1/2*(TEST(i,1)-FEMALE(j,1))^2);
PrazenMaleProk(1,j) =1/sqrt(2*pi)*exp(-1/2*(TEST(i,1)-MALE(j,1))^2);
end
FemaleProk = sum(PrazenFemaleProk,2);
MaleProk = sum(PrazenMaleProk,2);
FemalePro = FemaleProk(1,1)/50;
MalePro = MaleProk(1,1)/50;
if(FemalePro*PreFp>MalePro*PreMp)
plot(i,TEST(i,1),'b*');
if TEST(i,3)==109
Ncount=Ncount+1;
text('String','(应该为男)',...
'Position',[i,TEST(i,1)],...
'FontSize',8);
end
else
if(FemalePro*PreFp<MalePro*PreMp)
plot(i,TEST(i,1),'k+');
if TEST(i,3)==102
Ncount=Ncount+1;
text('String','(应该为女)',...
'Position',[i,TEST(i,1)],...
'FontSize',8);
end
end
end
hold on;
end
title('基于Parzen窗非参数估计(标准正太分布)的贝叶斯分类(*为女生,+号为男生)');
xlabel('体重(Kg)'),ylabel('身高(Cm)');
axis([0 36 140 200]);
figure(2);
for i=1:35
for j = 1:50
if(abs(TEST(i,1)-FEMALE(j,1))<(Hn/2)^i)
FemaleNcount = FemaleNcount +1;
else
if(abs(TEST(i,1)-MALE(j,1))<(Hn/2)^i)
MaleNcount = MaleNcount + 1;
end
end
end
FemalePro =FemaleNcount /Kn;
MalePro =MaleNcount/Kn;
if(FemalePro*PreFp>MalePro*PreMp)
plot(i,TEST(i,1),'b*');
if TEST(i,3)==109
text('String','(应该为男)',...
'Position',[i+0.5,TEST(i,1)],...
'FontSize',8);
end
else
if(FemalePro*PreFp<MalePro*PreMp)
plot(i,TEST(i,1),'k+');
if TEST(i,3)==102
text('String','(应该为女)',...
'Position',[i+0.5,TEST(i,1)],...
'FontSize',8);
end
end
end
hold on;
end
title('基于Parzen窗非参数估计(方窗)的贝叶斯分类(*为女生,+号为男生)');
xlabel('体重(Kg)'),ylabel('身高(Cm)');
axis([0 36 140 200]);
ErrorRate=Ncount/35*100;
sprintf('%s%d,%s%0.2f%s','分类错误个数为:',Ncount,'该先验概率下的错误率为:',ErrorRate,'%')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -