文本分类-贝叶斯分类器

Posted 大邓带你玩python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本分类-贝叶斯分类器相关的知识,希望对你有一定的参考价值。

这两天阅读了小半部分《贝叶斯思维-统计建模的python学习法》,贝叶斯理论推导过程是本书的亮点,看一遍就能记住。案例也挺丰富有趣,但代码部分写的比较晦涩,代码上来就使用类,对python小白不是很友好。至今大邓看着仍然比较蛋疼,不建议python初学者入手这本书。但可以学下理论知识,方便学机器学习时候用到。

今天咱们就讲讲贝叶斯的原理及朴素贝叶斯文本分类算法。都是很久出

概率计算基础(有基础的可跳过)

条件概率

事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A | B),读作“在B条件下A的概率”。

联合概率

两个事件共同发生的概率。A与B的联合概率表示为 P(AB) 或者P(A,B),或者P(A∩B)。

有了前面的基本知识,现在我们先看一个曲奇饼问题,再展开贝叶斯定理的推导

曲奇饼问题

假设有两碗曲奇饼,

碗A包含30个香草曲奇饼和10个巧克力曲奇饼,

碗B这两种曲奇饼各20个。

现在假设你在不看的情况下随机地挑一个碗拿一块饼,得到了一块香草曲奇饼。

问题:从碗A渠道香草曲奇饼的概率是多少

思路

这是一个条件概率问题,我们希望得到P(碗A|香草饼),现在我们很容易知道P(香草饼|碗A)=3/4,如果将两者联系起来,那么P(碗A|香草饼)就很容易算得。但可惜P(A|B)与P(B|A)是不同的。但贝叶斯定理可以通过一个概率计算另一个概率。

贝叶斯定理推导步骤(记得公式的可跳过)

  1. 联合概率可交换,即 P(A and B)=P(B and A)

  2. 对于任意事件A、B都独立,因此联合概率P(A and B)=P(B)P(A|B)

  3. 2步骤执行交换,即P(B and A)=P(A)P(B|A)

  4. 因为步骤1等式,有如下等式成立P(B)P(A|B)=P(A)P(B|A)

  5. 最后等式两端除以P(B),得到P(A|B)=P(A)P(B|A)/P(B)

这就是贝叶斯定理,推导过程比中学时要简单很多。先来计算下曲奇饼问题

P(碗A|香草饼)= P(碗A)*P(香草饼|碗A)/P(香草饼)

P(碗A)=1/2 P(香草饼|碗A)=3/4 P(香草饼)=50/(50+30)=5/8 所以最后经过计算P(碗A|香草饼)=3/5

先验概率、后验概率、似然度、标准化常量

对上述贝叶斯定理的理解,还有一种解释思路,叫做“历时诠释”。“历时”意味着某些事情随着时间而发生,在本案例中,即假设的概率随着看到新数据而发生变化。

在考虑H(假设Hypothsis)和D(Data),情况下,贝叶斯定理的表达式可以写成: P(H|D)=P(H)P(D|H)/P(D)

在考虑H和D的情况下,每项意义如下:

  • P(H)称为先验概率,即在得到新数据前某一假设的概率。如没有得到掷硬币结果前,我们先假设正反面概率各位50%。

  • P(H|D)称为后验概率,即看到新数据后,我们要计算的该假设的概率。

  • P(D|H)是该假设下得到这一数据的概率,称为似然度。

  • P(D)是任何假设下得到这一数据的概率,称为标准化常量。

我们可以分析下各个数值的特点。

  • 先验概率是偏主观性的,对某一先验概率,不同的人会有不同的判断,比如硬币正反面出现的概率这个问题。有点人假设硬币均匀,正反面概率应该是各50%;另一部分人假设硬币其实并不是完全均匀的,正反概率应该是接近但不等于50%。这就是先验概率的主观性表现。

  • 似然度比较好理解,在曲奇饼问题中曲奇饼来自哪个碗,则我们就计算那个碗中香草曲奇饼的概率

  • 标准化常量:在所有的假设条件下这一数据出现的概率。比如在曲奇饼问题中,仅有两个假设:碗A或碗B,他们可以用全概率公式计算P(D)。W代表碗筷,Wa代表碗a,Wb代表碗b

P(D)=P(Wa)P(D|Wa)+P(Wb)P(D|Wb)

朴素贝叶斯分类器算法

有了前面的知识准备,我们接下来简单了解下朴素贝叶斯分类器算法,该算法描述摘自《机器学习实践指南-案例应用解析(第2版)》(P473-474)。

算法描述:

  1. 获取样本文本,将样本人工分类整理,并进行标记。(机器学习的关键是有人工标注后的数据,而且是大量的标注数据,这样才能训练好一个模型。)

  2. 对每个类别下的文本分词

  3. 移除文本中的垃圾词条(可以理解为移除去停词,这样可以有效降低特词数目,达到降维提高运行效率的目的)

  4. 将整理后的词条合成样本文本的特征词组,计算词条频率。例如,假设有3类文本,词条i在类别A、B、C中出现的次数分别为COUNTi(A)、COUNTi(B)、COUNTi(C),每个类别的词条总数为WORDCOUNT(A)、WORDCOUNT(B)、WORDCOUNT(C),那么可以计算出每个词条在相应类别中的频率。比如某类文本有100个词,而“冬天”出现了5次,那么“冬天”一词在该文本中的词频是0.05

  5. 根据词条频率信息,计算词条在各类别文本的先验概率。词条i的各类别先验概率计算公式为:

    Pi(A)=COUNTi(A)/WORDCOUNT(A)

    Pi(B)=COUNTi(B)/WORDCOUNT(B)

    Pi(C)=COUNTi(C)/WORDCOUNT(C)

  6. 读取未知的文本数据,分词、移除垃圾词,然后形成样本特征词组

  7. 将未知文本特征词条的先验概率带入贝叶斯公式中,计算后验概率,取出最大的后验概率所属的类别即为文本所属类别。

更多内容

文本分析

    

   

  

  

  

  

  

  

数据分析

  

  

神奇的python

  

  

 

      

 

 

 

爬虫

  

  


  

   




  

  

  

  




以上是关于文本分类-贝叶斯分类器的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯文本分类器 - 确定何时应将文档标记为“未分类”

贝叶斯分类器(3)朴素贝叶斯分类器

R实战——贝叶斯分类器-文本情感分析

如何使用火花朴素贝叶斯分类器进行 IDF 文本分类?

朴素贝叶斯构建“饥饿站台”豆瓣短评情感分类器

基于朴素贝叶斯分类器的文本分类