zoukankan      html  css  js  c++  java
  • 朴素贝叶斯分类算法(1)

    转自http://blog.csdn.net/lch614730/article/details/17031145

    朴素贝叶斯分类算法(Naive Bayesian classification)

    PS:本文在讲解的时候会用通俗的例子来讲解

    本文我们将学习到:

    (1)什么是朴素贝叶斯?

    (2)先验概率和条件概率是如何证明的?

    (3)文本分类的多项式模型和伯努利模型(附加例子说明)

    (4)垃圾邮件的分类及代码的演示(暂缺以后会补上)


    (1)什么是朴素贝叶斯(Naive Bayes,以后简称NB)?

    首先先要区分一下: 判别式模型(discriminative model)和产生式模型(generative model
    判别式模型(discriminative model :
        简单的说就是分类的最终结果是以某个函数或者是假设函数的取值范围来表示它属于那一类的,例如  H(x)> 0 就是第一类 H(x)< 0。该模型主要对p(y|x)建模,通过x来预测y。在建模的过程中不需要关注联合概率分布。只关心如何优化p(y|x)使得数据可分。通常,判别式模型在分类任务中的表现要好于生成式模型。但判别模型建模过程中通常为有监督的,而且难以被扩展成无监督的。
       
    产生式模型(generative model
       该模型对观察序列的联合概率分布p(x,y)建模,在获取联合概率分布之后,可以通过贝叶斯公式得到条件概率分布。生成式模型所带的信息要比判别式   模型更丰富。除此之外,生成式模型较为容易的实现增量学习。
      
    由上可知,判别模型与生成模型的最重要的不同是,训练时的目标不同,判别模型主要优化条件概率分布,使得x,y更加对应,在分类中就是更可分。而生成模型主要是优化训练数据的联合分布概率。而同时,生成模型可以通过贝叶斯得到判别模型,但判别模型无法得到生成模型。

    以下是两者比较的结果表:

     

     

    判别式模型(discriminative model)

    产生式模型(generative model)

     

    特点

    寻找不同类别之间的最优分类面,反映的是异类数据之间的差异

    对后验概率建模,从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度

    区别(假定输入x, 类别标签y)

    估计的是条件概率分布(conditional distribution) : P(y|x)

    估计的是联合概率分布(joint probability distribution: P(x, y),

    联系

    由产生式模型可以得到判别式模型,但由判别式模型得不到产生式模型。

     

     

    常见模型

    – logistic regression
    – SVMs
    – traditional neural networks
    – Nearest neighbor

    –Gaussians, Naive Bayes 
    –Mixtures of Gaussians, Mixtures of experts, HMMs
    –Sigmoidal belief networks, Bayesian networks
    – Markov random fields

     

     

     

     

    优点

    1)分类边界更灵活,比使用纯概率方法或产生式模型更高级;

    2)能清晰的分辨出多类或某一类与其他类之间的差异特征;

    3)在聚类、viewpoint changes, partial occlusion and scale variations中的效果较好;

    4)适用于较多类别的识别;

    5)判别模型的性能比产生式模型要简单,比较容易学习。

    1)实际上带的信息要比判别模型丰富;

    2)研究单类问题比判别模型灵活性强;

    3)模型可以通过增量学习得到;

    4)能用于数据不完整(missing data)情况。

     

     

     

     

    缺点

    1)不能反映训练数据本身的特性。能力有限,可以告诉你的是1还是2,但没有办法把整个场景描述出来;
    2)Lack elegance of generative: Priors, 结构, 不确定性;
    3)Alternative notions of penalty functions, regularization, 核函数;
    4)黑盒操作: 变量间的关系不清楚,不可视。

    1) Tend to produce a significant number of false positives. This is particularly true for object classes which share a high visual similarity such as horses and cows;
    2) 学习和计算过程比较复杂。

     

    性能

    较好(性能比生成模型稍好些,因为利用了训练数据的类别标识信息,缺点是不能反映训练数据本身的特性)

    较差

     

    主要应用

    Image and document classification
    Biosequence analysis
    Time series prediction

    NLP(natural language processing)
    Medical Diagnosis


    首先从bayes公式开头吧

                          P(C/W) = P(C) * P(W/C) / P(W)

    这 个公式是ML中最基本也是最常用到的公式,怎么强调它的重要性都不过分。为了更容易理解这个公式,我将bayes公式放在文本分类问题中进行解释。公式的 左边,C代表的是文本的类别(例如是体育或者娱乐),W往往是一个测试样本(例如某一篇新闻),P(C/W)代表的是这个样本归属于该类别的概率,我们实 际中的任务常常就是要得到样本归属各个类别的概率值P(C1/W),P(C2/W)...P(CN/W),然后最大概率值所对应的类别Ci就是该样本被分 配的类。计算这个概率值的方法就是bayes公式的右边。P(C)表示C这个类别在所有文本中的概率,是先验概率(不急后面会介绍到。实际中,这个值往往通过训练语料计算得到,例如,将训练语料中所有的体育文本数除以训练语料总的文本数,就是体育这个类别的先验概率。P(W)则是通过这个公式计算:      P(W) =  ∑P(W/Ci) * P(Ci)
    可以看出,P(W)的计算可以通过 P(C)和P(W/C)得到。P(W/C)的计算下面将重点介绍。现在的问题是怎样计算P(W/C)。在现实中,W这个样本往往是用向量表示的,包括了很多的分量 W = (w1, w2, w3,  ... wn), 所以 P(W/C) = P(w1, w2, w3,  ... wn / C),NB的核心在于它假设向量的所有分量之间是独立的。(这个同样是贝叶斯的缺点),Wi is independent of Wj, if i != j。对!这个假设就是NB的全部内容了,是不是很简单。有了这个假设,P(W/C)的计算 就变为: P(W/C) = ∏ P(wi / C)

    (2)先验概率和条件概率是如何证明的?

    朴素贝叶斯多项式模型证明:

     
    下面这个公式中第二个等式到第三个等式不大对。这个证明可以看NG machine learning 的Problem Set 1



    上面的推导说明:求导的两个公式可化为2个等式,千万别忘了还有两个和为1的等式,4个等式即可推导出来

    PS:拉普拉斯平滑化是为了防止概率为0的情况出现


    --------------------------------------------
    朴素贝叶斯伯努利模型证明:






    (3)文本分类的多项式模型和伯努利模型(附加例子说明)

    1、基本定义:

    分类是把一个事物分到某个类别中。一个事物具有很多属性,把它的众多属性看作一个向量,即x=(x1,x2,x3,…,xn),用x这个向量来代表这个事物,x的集合记为X,称为属性集。类别也有很多种,用集合C={c1,c2,…cm}表示。一般X和C的关系是不确定的,可以将X和C看作是随机变量,P(C|X)称为C的后验概率,与之相对的,P(C)称为C的先验概率。

    根据贝叶斯公式,后验概率P(C|X)=P(X|C)P(C)/P(X),但在比较不同C值的后验概率时,分母P(X)总是常数,忽略掉,后验概率P(C|X)=P(X|C)P(C),先验概率P(C)可以通过计算训练集中属于每一个类的训练样本所占的比例,容易估计,对类条件概率P(X|C)的估计,这里我只说朴素贝叶斯分类器方法,因为朴素贝叶斯假设事物属性之间相互条件独立,P(X|C)=∏P(xi|ci)。

    2、文本分类过程

    例如文档:Good good study Day day up可以用一个文本特征向量来表示,x=(Good, good, study, Day, day , up)。在文本分类中,假设我们有一个文档d∈X,类别c又称为标签。我们把一堆打了标签的文档集合<d,c>作为训练样本,<d,c>∈X×C。例如:<d,c>={Beijing joins the World Trade Organization, China}对于这个只有一句话的文档,我们把它归类到 China,即打上china标签。

    朴素贝叶斯分类器是一种有监督学习,常见有两种模型,多项式模型(multinomial model)即为词频型和伯努利模型(Bernoulli model)即文档型。二者的计算粒度不一样,多项式模型以单词为粒度,伯努利模型以文件为粒度,因此二者的先验概率和类条件概率的计算方法都不同。计算后验概率时,对于一个文档d,多项式模型中,只有在d中出现过的单词,才会参与后验概率计算,伯努利模型中,没有在d中出现,但是在全局单词表中出现的单词,也会参与计算,不过是作为“反方”参与的。这里暂不考虑特征抽取、为避免消除测试文档时类条件概率中有为0现象而做的取对数等问题。

    2.1多项式模型

    1)基本原理

    在多项式模型中, 设某文档d=(t1,t2,…,tk),tk是该文档中出现过的单词,允许重复,则

    先验概率P(c)= 类c下单词总数/整个训练样本的单词总数

    类条件概率P(tk|c)=(类c下单词tk在各个文档中出现过的次数之和+1)/(类c下单词总数+|V|)

    V是训练样本的单词表(即抽取单词,单词出现多次,只算一个),|V|则表示训练样本包含多少种单词。 P(tk|c)可以看作是单词tk在证明d属于类c上提供了多大的证据,而P(c)则可以认为是类别c在整体上占多大比例(有多大可能性)。

    2)举例

    给定一组分好类的文本训练数据,如下:

    docId doc 类别

    In c=China?

    1 Chinese Beijing Chinese yes
    2 Chinese Chinese Shanghai yes
    3 Chinese Macao yes
    4 Tokyo Japan Chinese no

    给定一个新样本Chinese Chinese Chinese Tokyo Japan,对其进行分类。该文本用属性向量表示为d=(Chinese, Chinese, Chinese, Tokyo, Japan),类别集合为Y={yes, no}。

    yes下总共有8个单词,类no下总共有3个单词,训练样本单词总数为11,因此P(yes)=8/11, P(no)=3/11。类条件概率计算如下:

    P(Chinese | yes)=(5+1)/(8+6)=6/14=3/7

    P(Japan | yes)=P(Tokyo | yes)= (0+1)/(8+6)=1/14

    P(Chinese|no)=(1+1)/(3+6)=2/9

    P(Japan|no)=P(Tokyo| no) =(1+1)/(3+6)=2/9

    分母中的8,是指yes类别下textc的长度,也即训练样本的单词总数,6是指训练样本有Chinese,Beijing,Shanghai, Macao, Tokyo, Japan 共6个单词,3是指no类下共有3个单词。

    有了以上类条件概率,开始计算后验概率:

    P(yes | d)=(3/7)3×1/14×1/14×8/11=108/184877≈0.00058417

    P(no | d)= (2/9)3×2/9×2/9×3/11=32/216513≈0.00014780

    比较大小,即可知道这个文档属于类别china。

    2.2伯努利模型

    1)基本原理

    P(c)= 类c下文件总数/整个训练样本的文件总数

    P(tk|c)=(类c下包含单词tk的文件数+1)/(类c下单词总数+2)

    2)举例

    使用前面例子中的数据,模型换成伯努利模型。

    yes下总共有3个文件,类no下有1个文件,训练样本文件总数为11,因此P(yes)=3/4, P(Chinese | yes)=(3+1)/(3+2)=4/5,条件概率如下:

    P(Japan | yes)=P(Tokyo | yes)=(0+1)/(3+2)=1/5

    P(Beijing | yes)= P(Macao|yes)= P(Shanghai |yes)=(1+1)/(3+2)=2/5

    P(Chinese|no)=(1+1)/(1+2)=2/3

    P(Japan|no)=P(Tokyo| no) =(1+1)/(1+2)=2/3

    P(Beijing| no)= P(Macao| no)= P(Shanghai | no)=(0+1)/(1+2)=1/3

    有了以上类条件概率,开始计算后验概率,

    P(yes|d)=P(yes)×P(Chinese|yes)×P(Japan|yes)×P(Tokyo|yes)×(1-P(Beijing|yes))×(1-P(Shanghai|yes))×(1-P(Macao|yes))=3/4×4/5×1/5×1/5×(1-2/5) ×(1-2/5)×(1-2/5)=81/15625≈0.005

    P(no|d)= 1/4×2/3×2/3×2/3×(1-1/3)×(1-1/3)×(1-1/3)=16/729≈0.022

    因此,这个文档不属于类别china。


    (4)垃圾邮件的分类及代码的演示(暂缺以后会补上)

  • 相关阅读:
    C++编译期间字节序判断
    解决:无法使用前导 .. 在顶级文件夹上退出
    手动脱WinUpack 壳实战
    浅谈cocos2dx(18) 中工厂模式
    手把手带你画一个 时尚仪表盘 Android 自己定义View
    Git实战(二)原理
    <html>
    Ubuntu局域网下利用client联网
    Desugar Scala(17) -- Option和for,以及脑子里发生的事情
    通过Canvas及File API缩放并上传图片完整演示样例
  • 原文地址:https://www.cnblogs.com/lysuns/p/4634961.html
Copyright © 2011-2022 走看看