序言:
贝叶斯公式中学都学过的东西,本节主要的目的是从机器学习的视角解读贝叶斯公式,以及怎样的将贝叶斯公式应用于实际的工程当中。贝叶斯学派的思想可以概括为先验概率+数据=后验概率。也就是说我们在实际问题中需要得到的后验概率,可以通过先验概率和数据一起综合得到。在很多实际应用中,贝叶斯理论很好用,比如垃圾邮件分类,文本分类等等。
一,贝叶斯公式和后验概率
假如有两个相互独立的变量X和Y,有公式:
从而推出贝叶斯公式:
对于分母的P(X) 有全概率公式:
将P(X)全概率公式代入条件概率中:
举个例子:
我们收集了一大堆的数据, X表示特征的集合,Y表示类别的集合。对应上面的公式有简易的表示为:
- P(归属的类别|具有某特征)解释为,具有某一些特征的数据归属于某类别的概率,称为后验概率,这也是我们所希望求得的概率。以邮件分类为例,已知某些词判断其为垃圾邮件的概率。
- P(具有某特征|归属类别)解释为,在知道归属类别的情况是具有某特征的概率,称为先验概率,可以通过语料库来进行计算。以邮件分类为例,此概率表示为,垃圾邮件中出现某些单词的概率
- P(归属类别)在一个语料库中属于某类别的个数除以样本总数。如有垃圾邮件和正常邮件各为一般则P(垃圾邮件)=1/2。
二,贝叶斯的巧妙:
贝叶斯公式之所以巧妙,我认为是它将求后验概率转化为了求先验概率!
还是以邮件分类为例!假如从邮件中摘出一句话“快来爽吧KTV,酒水全场五折!”判断其为垃圾邮件的概率,用公式表示为:P(垃圾邮件|“快来爽吧KTV,酒水全场五折!”)
根据贝叶斯公式,转化为求先验概率:
这下就简单了,给定一个邮件的语料库,数数次数就可以了。从这里可以看出贝叶斯属于有监督的学习方式,需要提前的根据标签进行训练。
三,数据稀疏和独立假设
但是在实际的语料库中,在垃圾邮件中出现完整的此句话的概率很小,这是因为汉语博大精深,同一个意思表达方式千差万别,所以我们把句子拆分为词来看下,通过此种方式来降低数据的稀疏,避免出现的概率为0,如下例子:
P(‘快来爽吧KTV,酒水全场五折!’|垃圾邮件)
=P(‘快来,爽,吧,KTV,酒水,全场,五折’|垃圾邮件)
通过分词把句子拆分为词,但是计算此概率还是比较困难,此时NB的贝叶斯引入了独立假设,即:假设各个词之间是相互独立的(数据的各个特征之间是独立的),接下来神奇的事情发生了:
=P(‘快来,爽,吧,KTV,酒水,全场,五折’|垃圾邮件)
=P(快来|S)*P(爽|S)*…*P(五折|S)
S表示垃圾邮件。
P(快来|S)=(垃圾邮件中‘快来’出现的次数)/(垃圾邮件中词的总数)
这里的独立假设就是Naïve的由来,贝叶斯+独立假设=朴素贝叶斯
Summary:
至此,我们通过分词和独立假设,将先验概率P(特征|归类)概率过可计算化,通过统计本句话拆分的词在垃圾邮件中出现的词频与总次数相比,最后将各个词的概率相乘。
四,贝叶斯模型建立:
假设分类模型的样本如下:
由上面的假设可知每个数据的特征不止有一个,有n个的特征,这就造成了:
假设各个特征之间是相互独立的那么有:
相互独立的假设条件大大简化了公式的计算难度,但也给其应用带来一定的限制,并不是数据的各个特征之间都是相互独立的。最终的目的是的具有某个特征的数据,属于某个类别的概率最大,用公式表示为:
对于所有计算数据来讲分母都是一样的略去,那一般式的写法为:
五,贝叶斯的Disable
上面我们讨论了通过分词,以词出现的频率代替整个句子或是文档的出现频率,此时有一个问题,即在贝叶斯模型看来“武松打死了老虎“和”老虎打死了武松“是一样一样的,这就是假设相互独立带来的局限性,称此种模型为词袋模型(Bag of Word)。为此我们可以引入语言模型N-gram,例如,当前词和前一个或是前两个词相关,分别称为unigram和bigram,即前后词之间有一定的语序关系。以bigram为例:
P(‘快来爽吧KTV,酒水全场五折!’|垃圾邮件)
=P(‘快来,爽,吧,KTV,酒水,全场,五折’|垃圾邮件)
=P(快来| S)*P(爽|快来,S)*…*P(五折|全场,S)
P(五折|全场,S)表示为在垃圾邮件中,词‘全场’后面为‘五折’的概率。
当加入了语言模型后就体现了语序的概念,其预测的结果就提升了一点。
处理重复词的三种模型
在一篇文章或是句子中不可避免的会出现重复词,例如“大厅酒水自助,全场酒水五折起!KTV包厢酒水低至一折“,这句话中‘酒水’连续出现了三次,贝叶斯模型是如何处理的,下面是典型的三种模型:
1,多项式模型:
Key Point: 出现多少次就统计多少次
这里的‘酒水’出现了三次,所以有个三个多项式相乘。
公式版本:
如果
其中
https://zhuanlan.zhihu.com/p/100441799
2,伯努利分布:
简单理解为:只要词出现就计数为1,不管多少。
P(大厅酒水自助,全场酒水五折起!KTV包厢酒水低至一折|S)
=P(大厅|S)P(酒水|S)P(自助|S)*…*P(一折)
公式版本:
假设
混和模型:
第三种方式是在计算句子概率时,不考虑重复词语出现的次数,但是在统计计算词语的概率P(“词语”|S)时,却考虑重复词语的出现次数,这样的模型可以叫作混合模型
3,正态分布
如果
六,贝叶斯和频率学派之争
在垃圾邮件分类中,假设中体样本各有垃圾和正常邮件1 万封,
对于以上公式分母一样可以省略,又有P(Y1)=P(Y2),所以:
可以看出对于结果只需要比较右边的概率就可以了,我们把它称之为似然函数,也可以解释为逆条件概率。即不考虑先验概率直接比较似然函数即可。这是频率学派的观点,而贝叶斯学派则建议考虑先验概率对结果的影响。
这里的关键就是,语料库的分布是否符合真实世界分布。当我们对数据的真实分布一无所知的时候,只能假设他们概率相同,使用最大似然公式计算,就是频率学派是拿过来直接干!统计词频。当我们确切的知道真实分布的情况的时候,我们乘上先验概率,所以贝叶斯学派假设数据服从于各种的分布,以减少与真实数据分布之间的差异。。
在深入的理解下贝叶斯学派的思想:当已知某特征求属于类别概率不好求的时候,往往求其逆反概率(已知归属类别求具有某特征概率),问题迎刃而解!
七,实际工程应用的tricks:
1:因概率较小,使用log函数。
P(大厅酒水自助,全场酒水五折起!KTV包厢酒水低至一折|S)
=logP(大厅|S)+ logP(酒水|S)+…+ logP(一折|S)
P(大厅酒水自助,全场酒水五折起!KTV包厢酒水低至一折|H)
=logP(大厅|H)+ logP(酒水|H)+…+ logP(一折|H)
这样将乘法运算转化为加法运算,然后可以将特定经常出现的词放到表中,以备查找。
2:将特定的条件概率事先算好,放在表中,减少计算次数,提高效率。
一般对于二分类项目,直接比较结果即可:
可以把上面的每一项看作为对应单词的权重,比如
3:选取TopK 个关键词,对其对应的权重进行加和,不过这样根据经验来选取判断结果的阈值。
实际采用方法,对于长篇幅邮件,按一定的大小,比如每500字,将其分割成小的文本段落,再对小文本段落采用topk关键词的方法。只要其中有一个小文本段落超过阈值就判断整封邮件是垃圾邮件。对于超短篇幅邮件,比如50字,可以按篇幅与标准比较篇幅的比例来选取topk,以确定应该匹配关键
词语的个数。比如选取 个词语进行匹配,相应的阈值可以是之前阈值的
4:位置权重
以上我们讨论过程中,没有考虑位置因素对概率的影响,完全可以在句首或是段落标题加一个很重的权重,正文默认权重为1;所以可以根据词语出现的位置,对其权重再乘以一个放大系数,以扩大其对整封邮件的影响,提高识别准确度。
本文整理参考寒老师视频教程,如有不妥之处,请予指正。
参考文献:
https://zhuanlan.zhihu.com/p/100441799
https://www.cnblogs.com/pinard/p/6069267.html