机器学习实验2-贝叶斯分类器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验意义及目的
1、掌握贝叶斯判别定理
2、能利用matlab编程实现贝叶斯分类器设计
3、熟悉基于matlab的算法处理函数,并能够利用算法解决简单问题
二、算法原理
贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。
其中P(A|B)是在B发生的情况下A发生的可能性
公式为:
贝叶斯法则:当分析样本大到接近总体数时,样本中事件发生的概率将接近于总体中事件发生的概率。
内容:
(1)两类w服从正态分布,设计基于最小错误率的贝叶斯分类器,对数据进行分
类。
(2)使用matlab进行Bayes判别的相关函数,实现上述要求。
(3)针对(1)中的数据,自由给出损失表,并对数据实现基于最小风险的贝叶斯分类。
三、实验内容
(1)尝两类w服从正态分布,设计基于最小错误率的贝叶斯分类器,对数据进行分类。
代码清单:
clc;
clear all;
meas=[0 0;2 0;2 2;0 2;4 4;6 4;6 6;4 6];%8x2矩阵这里一行一行2个特征
[N n]=size(meas);
species={'one';'one';'one';'one';'two';'two';'two';'two'};%这里也对应一行一行的
sta=tabulate(species)
[c k]=size(sta);
priorp=zeros(c,1);
for i=1:c
priorp(i)=cell2mat(sta(i,k))/100;%计算概率
end
%cell2mat(sta(:,2:3)) 提取数组中的数据本来sta数组中数据为矩阵不能直接用
%估算类条件概率参数
cpmean=zeros(c,n);
cpcov=zeros(n,n,c);
for i=1:c
cpmean(i,:)=mean(meas(strmatch(char(sta(i,1)),species,'exact'),:));%exact精确查找cpmean放的每一类的均值点几类就几行
cpcov(:,:,i)=cov(meas(strmatch(char(sta(i,1)),species,'exact'),:))*(N*priorp(i)-
1)/(N*priorp(i));
end
%求(3 1)的后验概率
x=[3 1];
postp=zeros(c,1);
for i=1:c
postp(i)=priorp(i)*exp(-(x-cpmean(i,:))*inv(cpcov(:,:,i))*(x-
cpmean(i,:))'/2)/((2*pi)^(n/2)*det(cpcov(:,:,i)));
end
if postp(1)>postp(2)
disp('第一类');
else
disp('第二类');
end
运行结果:
(2)使用matlab进行Bayes判别的相关函数,实现上述要求。
(3)针对(1)中的数据,自由给出损失表,并对数据实现基于最小错误率的贝叶斯分类:
给出损失表
在(1)的基础上增加代码:
r11=0;
r12=2 ;
r21=4 ;
r22=0 ;
%风险决策表
R1_x=zeros(1); %存放把样本X判为one所造成的整体损失
R2_x=zeros(1); %存放把样本X判为two所造成的整体损失
%计算两类风险值
pw1=priorp(1);
pw2=priorp(2);
R1_x=postp(2)*r12
R2_x=postp(1)*r21
if R1_x>R2_x
disp('two');
else
disp('one');
end
运行结果:
四、实验感想
通过这次实验,我学会了朴素贝叶斯分类器相关的分类方法,对数据分类有了进一步的认识,尽管在过程中有不少概率论相关知识忘记了,通过查阅概率论书籍或者询问同学,我最终完成了实验,为今后继续深入学习打下良好基础。