注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

极夜.潜的博客

 
 
 

日志

 
 

朴素贝叶斯分类器(Naive Bayes Classifier)  

2011-05-04 10:43:57|  分类: Research |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  朴素贝叶斯分类器(Naive Bayes Classifier) - 极夜.潜 - 极夜.潜的博客        朴素贝叶斯分类器(Naive Bayes Classifier) - 极夜.潜 - 极夜.潜的博客
一、朴素贝叶斯分类器理论基础
贝叶斯分类器是指基于贝叶斯理论的分类器;朴素是指特征之间相互独立(联合概率密度等概率密度的乘积),在实际应用中这是一个很强却有用的假设条件。贝叶斯分类器的原理是根据先验概率(prior)和似然函数(likelihood)计算后验概率(posterior),某类对应的后验概率大,对象就分为那类。根据贝叶斯理论,当特征为Fn,类别为C时,贝叶斯分类器是条件概率模型:
  朴素贝叶斯分类器(Naive Bayes Classifier) - 极夜.潜 - 极夜.潜的博客
当观测到对象的特征为Fn,已知先验概率p(C)和似然函数,计算对象属于类别C的概率。分母(evidence)与类别C无关,在分类时不提供判别信息,不作考虑。因此,分类只与分子有关,当贝叶斯模型满足朴素这个假设时,分子等价于:
  朴素贝叶斯分类器(Naive Bayes Classifier) - 极夜.潜 - 极夜.潜的博客
这就只需估计每个特征的似然函数p(Fn|C)(类C的特征Fn的概率密度函数),以及类别的先验概率p(C)(类C出现的概率)。为方便处理,有时还假设各特征不仅相互独立而且同分布(相同的概率模型)。

关于朴素贝叶斯分类器更详细的介绍可参阅wikipedia

二、贝叶斯模型的简单解释
贝叶斯模型的应用要计算这样一个条件概率:已知每一类出现的概率,并且每类的每个特征的概率分布已知(模型和参数事先通过数据获得),现在观察到某个样本的特征集,请计算该样本属于每一类的概率。如果是贝叶斯分类器,则会将样本划为概率大的那个类别。

假设有一台癌症诊断仪,如果患者确实患有癌症它的确诊率为90%,若果患者没有癌症,被诊断成癌症的概率为10%。假设人群中癌症患者的比重是1%。若某人被这台诊断仪诊断为癌症, 这个人患癌症的概率是多少?
本例需要计算p(癌症患者|诊断为癌症) = p(诊断为癌症|癌症患者)p(癌症患者)/p(诊断为癌症)
(1)计算癌症病人被确诊为癌症的概率:p(诊断为癌症|癌症患者)p(癌症患者) = 0.9 * 0.01
(2)计算诊断为癌症的概率(癌症病人被确诊为癌症及健康人被误诊为癌症):p(诊断为癌症) = p(诊断为癌症|癌症患者)p(癌症患者) + p(诊断为癌症|健康人)p(健康人) = 0.9*0.01 + 0.1*0.99
(3)p(癌症患者|诊断为癌症) = 8.3%
也就是说,如果被仪器诊断为癌症,实际患癌症的概率仅8.3%。如果按照贝叶斯分类器的标准,被仪器诊断为癌症的患者也是不可能患癌症的,这说明先验概率(人群中癌症患者的比重)对贝叶斯推断影响巨大。Bayes学派饱受批评的地方是先验概率的选取有时只是方便数学推导,而非准确的反映我们的先验知识。

三、Matlab中朴素贝叶斯分类器的应用
帮助文档位置:Statistics Toolbox --> User's Guide/Functions --> Classification --> Naive Bayes Classification

1、导入数据集: load fisheriris
这将导入两个数组:meas(150*4)表示观察到150个样本,每个样本4维特征;species(150*1)表示每个样本对应的类别。
关于数据集 Fisher Iris data(Fisher, 1936):数据集记录了3类鸢尾花(setosa、versicolor、virginica)的4个特征(萼片sepal的长、宽,花瓣petal的长、宽),每类花50个样本,因此数据集规模为150*4。
  朴素贝叶斯分类器(Naive Bayes Classifier) - 极夜.潜 - 极夜.潜的博客

2、训练贝叶斯分类器:O2 = NaiveBayes.fit(meas,species,'dist',{'normal','kernel','normal','kernel'});
NaiveBayes是朴素贝叶斯分类器的类函数,O2表示根据相关数据初始化的贝叶斯分类器对象;dist指定每维特征对应的概率模型。

3、分类: C2 = O2.predict(meas);
C2为贝叶斯分类器根据特征集meas的分类结果,数据样式与species相同。

4、分类结果统计:cMat2 = confusionmat(species,C2);
cMat2是维数为类别数的方阵,元素cMat2(i, j)表示属于类i而贝叶斯分类器分为类j的数量,对角线元素表示正确分类的数目。本例中cMat2=[50 0 0; 0 47 3; 0 3 47],表示类别1完全分类真确,将本属于类别2的3个样本错分给了类别3,并将本属于类别3的3个样本错分给了类别2。3类的识别率和召回率分别为:识别率——50/50=100%, 47/(47+3)=94%, 47/(47+3)=94%;召回率——50/50=100%, 47/(47+3)=94%, 47/(47+3)=94%。

5、贝叶斯分类器的其它属性与方法说明
O2.Params——贝叶斯分类器的概率模型参数,本例中为3*4的元胞矩阵,O2.Params{i, j}表示类别i的第j维特征对应的概率模型参数;
O2.Prior——每类的先验概率,本例中均为1/3;
O2.posterior(特征数组)——计算每个样本属于每类的后验概率,本例的O2.posterior(meas)将输出150*3的矩阵,第(i, j)个元素表示第i个样本属于类j的后验概率,第i个样本对应哪类的后验概率大,i就属于哪类;
O2.disp——关于贝叶斯分类器O2的简要说明。

6、一点简单的检验
为方便验算,所有概率模型均采用默认的正态分布,从新训练贝叶斯分类器O3 = NaiveBayes.fit(meas,species)。
(1)利用分布拟合工具,检验O3的参数与概率分布估计参数的一致性(以setosa第一维特征为例):dfittool(meas(1:50,1)),用正态分布拟合可得mu=5.006,sigma=0.35249,这与O3.Params{1,1}一致。
(2)计算第143个样本属于各类的概率:

load fisheririsO3 = NaiveBayes.fit(meas,species);id = 143; % check the id-th specimenfor i = 1 : 3    for j = 1 : 4        p(i, j) = normpdf(meas(id, j), O3.Params{i, j}(1), O3.Params{i, j}(2));        % p(i, j) is the possibility that the j-th feature belongs to i-th class.        % p(i, j) = p(j|i) == p(Fn|C)    endendfor i = 1 : 3    P(i) = O3.Prior(i) * prod(p(i, :));    % P(i) = p(i)*p(j|i) == p(C)*p(F1|C)*...*p(Fn|C)endP = P / sum(P); % P(i) is the possibility that id-th specimen belongs to the i-th class.Posterior = O3.posterior(meas);distance = dist(P, Posterior(id, :)')

由程序可得distance=1.112389315513593e-16,接近0,即P与Posterior(id, :)很接近,从而验证了手动计算和Matlab自动计算的一致性。

  评论这张
 
阅读(2666)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018