您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 朴素贝叶斯分类matlab实现
实验二朴素贝叶斯分类一、实验目的通过实验,加深对统计判决与概率密度估计基本思想、方法的认识,了解影响Bayes分类器性能的因素,掌握基于Bayes决策理论的随机模式分类的原理和方法。二、实验内容设计Bayes决策理论的随机模式分类器,用matlab实现。三、方法手段Bayes分类器的基本思想是依据类的概率、概密,按照某种准则使分类结果从统计上讲是最佳的。换言之,根据类的概率、概密将模式空间划分成若干个子空间,在此基础上形成模式分类的判决规则。准则函数不同,所导出的判决规则就不同,分类结果也不同。使用哪种准则或方法应根据具体问题来确定。四、Bayes算法朴素贝叶斯分类或简单贝叶斯分类的工作过程如下:(1)每个数据样本用一个n维特征向量12,,...nXxxx表示,分别描述对n个属性A1,A2,…An样本的n个度量。(2)假定有m个类C1,C2,…Cm。给定一个未知的数据样本X(即没有类标号),分类法将预测X属于具有最高后验概率(条件X下)的类。即是说,朴素贝叶斯分类将未知的样本分配给类Ci,当且仅当,1,ijPCXPCXjmji(2.1)这样,最大化iPCX。其iPCX最大的类Ci称为最大后验假定。根据贝叶斯定理PXHPHPHXPX,iiiPXCPCPCXPX(2.2)(3)由于P(X)对于所有类为常数,只需要iiPXCPC最大即可。如果类的先验概率未知,则通常假定这些类是等概率的,即P(C1)=P(C2)=…=P(Cm)。并据此只对iPXC最大化。否则,最大化iiPXCPC。注意,类的先验概率可以用iiPCss计算其中si是类Ci中的训练样本数,而s是训练样本总数。(4)给定具有许多属性的数据集,计算iPXC的开销可能非常大。为降低计算iPXC的开销,可以做类条件独立的朴素假定。给定样本的类标号,假定属性值相互条件独立,即在属性间,不存在依赖关系。这样,1nikikPXCpxC(2.3)概率1iPXC,2iPXC,…niPXC可以由训练样本估值,其中1)如果Ak是分类属性,则kiikiPXCss,其中sik是在属性Ak上具有值xk的类Ci的样本数,而si是Ci中的训练样本数。2)如果Ak是连续值属性,则通常假定该属性服从高斯分布,因而,2221,,2CiiiikikCCCxkCiPXCgxe(2.4)其中,给定类Ci的训练样本属性Ak的值,,,iikCCgx是属性Ak的高斯密度函数,而,iiCC分别为平均值和标准差。(5)为对未知样本X分类,对每个类Ci,计算iiPXCPC。样本X被指派到类Ci,当且仅当,1,iijjPXCPCPXCPCjmji换言之,X被指派到其iiPXCPC最大的类Ci。例使用朴素贝叶斯分类预测类标号:RIDAgeIncomeStudentCredit_ratingClass:buys_computer1=30HighNoFairNo2=30HighNoExcellentNo331…40HighNoFairYes440MediumNoFairYes540LowYesFairYes640LowYesExcellentNo731…40LowYesExcellentYes8=30MediumNoFairNo9=30LowYesFairYes1040MediumYesFairYes11=30MediumYesExcellentYes1231…40MediumNoExcellentYes1331…40HighYesFairYes1440MediumNoExcellentNo给定与判定树归纳相同的训练数据,我们希望使用朴素贝叶斯分类预测一个未知样本的类标号。训练数据在表7.1中。数据样本用属性age,income,student和credit_rating描述。类标号属性buys_computer具有两个不同值(即(yes,no))。设C1对应于类buys_computer=“yes”,而C2对应于类buys_computer=“no”。我们希望分类的样本为30,,,_Xageincomemediumstudentyescreditratingfair我们需要最大化iiPXCPC,i=1,2。每个类的先验概率P(Ci)可以根据训练样本计算:P(buys_computer=”yes”)=9/14=0.643P(buys_computer=”no”)=5/14=0.357为计算iPXC,i=1,2,我们计算下面的条件概率:P(age=”30”|buys_computer=”yes”)=2/9=0.222P(age=”30”|buys_computer=”no”)=3/5=0.222P(income=”medium”|buys_computer=”yes”)=4/9=0.444P(income=”medium”|buys_computer=”no”)=2/5=0.400P(student=”yes”|buys_computer=”yes”)=6/9=0.667P(student=”yes”|buys_computer=”no”)=1/5=0.200P(credit_rating=”fair”|buys_computer=”yes”)=6/9=0.667P(credit_rating=”fair”|buys_computer=”no”)=2/5=0.400使用以上概率,我们得到:P(X|buys_computer=”yes”)=0.222×0.444×0.667×0.667=0.044P(X|buys_computer=”no”)=0.600×0.400×0.200×0.400=0.019P(X|buys_computer=”yes”)P(buys_computer=”yes”)=0.044×0.643=0.028P(X|buys_computer=”no”)P(buys_computer=”no”)=0.019×0.357=0.007因此,对于样本X,朴素贝叶斯分类预测buys_computer=”yes”。五、实验结果训练数据train1.txt内容及格式如下:需要分类的数据(预测数据)predict1.txt如下:程序执行结果如下:六、实验总结贝叶斯分类的效率如何?理论上讲,与其它所有分类算法相比较,贝叶斯分类具有最小的出错率。然而,实践中并非总是如此。这是由于对其应用的假定(如类条件独立性)的不准确性,以及缺乏可用的概率数据造成的。然而种种实验研究表明,与决策树和神经网络分类算法相比,在某些领域,该分类算法可以与之媲美。贝叶斯分类还可以用来为不直接使用贝叶斯定理的其他分类算法提供理论判定。例如,在某种假定下,可以证明正如朴素贝叶斯分类一样,许多神经网络和曲线拟合算法输出最大的后验假定。七、Batyes程序functionout=my_bayes(X,Y)%X为原数据集,Y是要预测的数据,out是返回预测的结果%%%%%%%%%%%%%%%%%%%%%%打开test.txt文件clc;file=textread('train1.txt','%s','delimiter','\n','whitespace','');[m,n]=size(file);fori=1:mwords=strread(file{i},'%s','delimiter','');words=words';X{i}=words;endX=X';%转置%%%%%%%%%%%%%%%%%%%%%打开predict.txt文件file=textread('predict1.txt','%s','delimiter','\n','whitespace','');[m,n]=size(file);fori=1:mwords=strread(file{i},'%s','delimiter','');words=words';Y{i}=words;endY=Y';%转置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%训练部分[M,N]=size(X);[m,n]=size(X{1});decision=attribute(X,n);%提取决策属性Pro=probality(decision);%计算决策属性个分量概率fori=1:n-1[post_pro{i},post_name{i}]=post_prob(attribute(X,i),decision);%求各条件属性后验概率end%%%%%%%%%%%%%%%%%%%%%%%%预测部分uniq_decis=unique(decision);%求决策属性的类别P_X=ones(size(uniq_decis,1),1);%初始化决策属性后验概率[M,N]=size(Y);k=1;fori=1:Mforj=1:n-1[temp,loc]=ismember(attribute({Y{i}},j),unique(attribute(X,j)));%决策属性计算后验概率P_X=post_pro{j}(:,loc).*P_X;%各条件属性后验概率之积(贝叶斯公式)end[MAX,I]=max(P_X);%寻找最大值out{k}=uniq_decis{I};%哪一类决策属性后验概率最大,则次样本属于那一类k=k+1;P_X=ones(size(uniq_decis,1),1);%再次初始化决策属性后验概率P_X,以便为下一样本计算作准备endout=out';%输出结果(转置形式)%%%%%%%%%%%%%%%%%%%%%各子程序functiony=attribute(X,n)%功能为提取出原数据集X中的第n个属性所对应的一列值[M,N]=size(X);fori=1:Mtemp{i}=X{i}{n};%将指定列值以temp暂量保存endy=temp';%转置%%%%%%%%%%%%%%%%%function[post_pro,post_name]=post_prob(E,D)%E为目标属性,D为决策属性,post_pro计算目标属性对应于决策属性的后验概率%post_name为所求的后验概率变量名称[M,N]=size(D);decision=unique(D);%决策属性种类attri=unique(E);%条件属性种类[m1,n1]=size(decision);[m2,n2]=size(attri);temp=cat(2,E,D);%连接条件属性和决策属性post_pro=zeros(m1,m2);%后验概率初始化fori=1:Mforj=1:m2fork=1:m1post_name{k,j}=cat(2,{attri{j}},{decision{k}});if(isequal(temp(i,:),post_name{k,j}))post_pro(k,j)=post_pro(k,j)+1;%条件属性后验概率(频数)endendendendfori=1:m1post_pro(i,:)=post_pro(i,:)/sum(post_pro(i,:));%求得条件属性后验概率end%%%%%%%%%%%%%%%%%%%functiony=probality(E)%计算该属性类的概率[M,N]=size(E);class=unique(E);%求该决策属性的类别[m,n]=size(class);p=zeros(m,1);%先验概率p初始化fori=1:Mforj=1:mif(isequal(E{i},class{j}))p(j)=p(j)+1;%求各个样本的先验概率(频数)endendendy=p/M;%得各样本概率
本文标题:朴素贝叶斯分类matlab实现
链接地址:https://www.777doc.com/doc-1465943 .html