`

Bayes文本分类算法案例 学习笔记

阅读更多
在文本分类中,假设我们有一个文档d∈X,X是文档向量空间(document space),和一个固定的类集合C={c1,c2,c3,...,cj},类别又称为标签.显然,文档向量空间是一个高纬度空间.我们把一堆打了标签的文档集合<d,c>作为训练样本,<d,c>∈X×C,
例如:<d,c>={Beijing joins the World Trade Organization,China}
对于这个只有一句话的文档,我们把它归类到China,即打上China标签.
我们期望用某种训练算法,训练出一个函数y,能够将文档映射到某一个类别:y:X→C
这种类型的学习方法叫做有监督学习,因为事先有一个监督者(我们事先给出了一堆打好标签的文档),像个老师一样监督着整个学习过程.
朴素贝叶斯分类器是一种有监督学习,常见有两种模型,多项式模型(multinomial model)和伯努利模型(Bernoulli model).

多项式模型案例:
给定一组分类好了的文本训练数据,如下:
dociddoc类别 in C=China?
1Chinese Beijing Chineseyes
2Chinese Chinese Shanghaiyes
3Chinese Macaoyes
4Tokyo Japan Chineseno

给定一个新样本Chinese ChineseChinese 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类别下text的长度,也即训练样本的单词总数,6是指训练样本有Chinese,Beijing,Shanghai,Macao,Tokyo,Japan共6个单词,3是指no类别下总共有3个单词.

后验概率计算如下:
P(yes|d) = 3/7×3/7×3/7×1/14×1/14×8/11=108/184877≈0.00058417
P(no|d) = 2/9×2/9×2/9×2/9×2/9×3/11=32/216513≈0.00014780
因此,这个文档属于类别China


伯努利模型:
1.基本原理:
P(c)=类c下文件总数/整个训练样本的文件总数
P(tk|c)=(类c下包含单词tk的文件数+1)/(类c下单词总数+2)
在这里,m=2,p=1/2.

类yes下总共有3个文件,类no下有1个文件,训练样本文件总数为4,因此
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

两种模型的区别:
二者的计算粒度不一样,多项式模型以单词为粒度,伯努利模型以文件为粒度,因此二者的先验概率和类条件概率计算方法不同
计算后验概率时,对于一个文档d,多项式模型中,只有在d中出现过的单词,才会参与后验概率计算,伯努利模型中,没有在d中出现,但是在全局单词表中出现的单词,也会参与计算,不过是作为"反方"参与的.


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics