1.贝叶斯要解决的问题:
(1)正向概率:假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率有多大。
(2)逆向概率:如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例做出什么样的推测。
(3)贝叶斯公式:P(A|B)=P(A)*P(B|A)/P(B)
2.贝叶斯实例
问题一:拼写纠正实例(我们看到用户输入了一个不在字典中的单词,我们需要去猜测“这个家伙到底想输入的单词是什么?”)
P(我们猜测他想输入的单词|他实际输入的单词) 比如我们输入的是tha
用户实际输入的单词记为D(D代表Date,即观测数据)
猜测1:P(h1|D)、猜测2:P(h2|D)、猜测3:P(h3|D)......统一为P(h|D)。假设h1表示单词the,h2表示单词than,h3表示单词they。
P(h|D)=P(h)*P(D|h)/P(D)
P(h1)表示字典中the出现的频率;P(h2)表示字典中than出现的频率;P(h3)表示字典中they出现的频率。
P(h1|D)表示本来想要输出the后来输成tha的概率;P(h2|D)表示本来想要输出than后来输成tha的概率;P(h3|D)表示本来想要输出they后来输成tha的概率。
对于不同的猜想,h1,h2,h3...,P(D)都是一样的,所以在比较P(h1|D)和P(h2|D)的时候,我们可以忽略常数。
对于给定观测数据,一个猜测是好是坏,取决于这个猜测本身独立的可能性大小(先验概率,Prior)和这个猜测生成我们观测到的数据的可能性大小。
贝叶斯方法计算:P(h)*P(D|h),P(h)是特定猜测的先验概率。
比如,用户输入一个tlp,那到底是top还是tip?这个时候,最大似然法不能作出决定性的判断,先验概率可以插手进来作出指示——既然你无法决定,那么我告诉你,一般来说,top出现的程度要高出许多,所以更可能他想打top。
实际操作:
求解:argmaxcP(c|w)——>argmaxcP(w|c)P(c)/P(w)
P(c):文章中出现一个正确拼写词c的概率,也就是说,在英语文章中,c出现的概率有多大。
P(w|c):在用户想键入c的情况下敲成w的概率,因为这个是代表用户以多大概率把c敲成w。
argmaxc:用来枚举所有可能的c,并且选取概率最大的。
问题二:垃圾邮件过滤实例(给定一封邮件,判断它是否属于垃圾邮件)
D表示这封邮件,D由N个单词组成,我们用h+来表示垃圾邮件,h-来表示正常邮件。
P(h+|D)=P(h+)*P(D|h+)/P(D) P(h+)表示垃圾邮件的先验概率,例如一万份邮件中有几份是垃圾邮件。
P(h-|D)=P(h-)*P(D|h-)/P(D) P(D|h+)表示是垃圾邮件且是单词D的概率。
先验概率:P(h+)和P(h-)这两个先验概率很容易求出来,只需要计算一个邮件库里面垃圾邮件和正常邮件的比例就行。
D里面有N个单词d1,d2,d3...,dn,P(h+|D)=P(d1,d2,d3...,dn|h+)
P(d1,d2,d3...,dn|h+)就是说在垃圾邮件中出现跟我们目前这封邮件一摸一样的一封邮件的概率有多大。
P(d1,d2,d3...,dn|h+)扩展为P(d1|h+)*P(d2|d1,h+)*P(d3|d2,d1,h+)*...
P(d1|h+)*P(d2|d1,h+)*P(d3|d2,d1,h+)*...:假设di与di-1是完全条件无关的(朴素贝叶斯假设特征之间是独立的,互不影响),可以简化为P(d1|h+)*P(d2|h+)*P(d3|h+)*...
对于P(d1|h+)*P(d2|h+)*P(d3|h+)*...,只需要统计di这个单词在垃圾邮件中出现的频率即可。