这两天阅读了小半部分《贝叶斯思维-统计建模的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)是不同的。但贝叶斯定理可以通过一个概率计算另一个概率。
贝叶斯定理推导步骤(记得公式的可跳过)
联合概率可交换,即 P(A and B)=P(B and A)
对于任意事件A、B都独立,因此联合概率P(A and B)=P(B)P(A|B)
2步骤执行交换,即P(B and A)=P(A)P(B|A)
因为步骤1等式,有如下等式成立P(B)P(A|B)=P(A)P(B|A)
最后等式两端除以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)。
算法描述:
获取样本文本,将样本人工分类整理,并进行标记。(机器学习的关键是有人工标注后的数据,而且是大量的标注数据,这样才能训练好一个模型。)
对每个类别下的文本分词
移除文本中的垃圾词条(可以理解为移除去停词,这样可以有效降低特词数目,达到降维提高运行效率的目的)
将整理后的词条合成样本文本的特征词组,计算词条频率。例如,假设有3类文本,词条i在类别A、B、C中出现的次数分别为COUNTi(A)、COUNTi(B)、COUNTi(C),每个类别的词条总数为WORDCOUNT(A)、WORDCOUNT(B)、WORDCOUNT(C),那么可以计算出每个词条在相应类别中的频率。比如某类文本有100个词,而“冬天”出现了5次,那么“冬天”一词在该文本中的词频是0.05
根据词条频率信息,计算词条在各类别文本的先验概率。词条i的各类别先验概率计算公式为:
Pi(A)=COUNTi(A)/WORDCOUNT(A)
Pi(B)=COUNTi(B)/WORDCOUNT(B)
Pi(C)=COUNTi(C)/WORDCOUNT(C)
读取未知的文本数据,分词、移除垃圾词,然后形成样本特征词组
将未知文本特征词条的先验概率带入贝叶斯公式中,计算后验概率,取出最大的后验概率所属的类别即为文本所属类别。
更多内容
文本分析
数据分析
神奇的python
爬虫