一、贝叶斯定理
我们高中学过条件概率,
后验概率表示在事件B发生的情况下事件A发生的概率。
通常,事件A在事件B发生的条件下的概率,与事件B在事件A的条件下的概率是不一样的;然而这两者有确定的关系,贝叶斯法则就是这种关系的陈述。
贝叶斯定理表达式:
举一个用贝叶斯公式求后验概率的简单例子,大家可能会很熟悉:
某射击训练中,射手甲的命中率是0.6,P(甲)=0.6,射手乙的命中率是0.5,P(乙)=0.5。现在甲、乙同时朝同一靶子射一枪,靶子被击中,求甲射中的概率。
靶子被击中P(中)有三种可能:
甲✔乙✘
甲✔乙✔
甲✘乙✔
代入贝叶斯公式我们很容易求出来:
二、朴素贝叶斯
朴素贝叶斯算法在解决数据挖掘分类问题中,用概率的形式表示数据的分类情况。属于监督学习的生成模型,实现简单,没有迭代,并有坚实的数学理论作为支撑。在大量样本下有较好的表现。
“朴素”是naïve一词的译意,表示在进行先验概率计算时暗含的一个假设:事件互相条件独立。
朴素贝叶斯问题表示如下:
我们提出假设,在ωi发生的情况下,事件相互独立。
所以原问题转化为条件独立问题:
条件独立在贝叶斯网络中有三种形式:
1 head-to-head
指在c未知的条件下,a、b是独立的。
例如我不知到我是否感冒的情况下,头疼和身子没劲两事件并没有直接关系,相对独立。
2 tail-to-tail
在c 已知的情况下,a、b 独立。
如下如,7*7的网格内部有3中基本颜色,红(R)、黄(Y)、蓝(B),三种颜色重叠的部分发生了颜色变化。
从整个网格的数据来看,R、B 不独立。
那么在黄色区域内部,R、B 独立。
3 head-to-tail
经常看到报道说男人比女人更容易得肺癌,单单从实际数据上看也确实如此。但稍微结合常识考虑一下,在男人(a)和得肺癌(b)两事件中间,还有一个十分重要的事件,吸烟(c)。男人爱抽烟,抽烟爱得肺癌。男人(a),吸烟(c),得肺癌(b)三事件就组成了一个基于head-to-tail形状的案例。所以身为男人与得肺癌两事件相对独立。
三、拉普拉斯平滑
如果某类数据性状不常出现,我们得到的数据中可能就不包含该类性状的数据。那么在计算朴素贝叶斯时,因为
各种概率乘在一起,一项为0整体也就为0。这对于数据分析很不利。所以我们对概率的表现形式做一点修改。拉普拉斯平滑公式如下:
公式分子分母为事件发生次数,分子+1,分母+该事件中性状的种类。
例如,在中国男足vs韩国男足的前5场的比分是0:5,中国队并没有出现“赢”的性状,那预测第六场中国队胜出的概率为:
分母的2为输、赢两种性状。
四、例子
1.拼写检查
我们在对单词lunch进行搜索时,如果不小心打成luncj或luncb,系统有时也能检测出我们可能想输入lunch,并搜索单词lunch直接给我们网页推荐。
用户输入了一个单词。这时分成两种情况:拼写正确,拼写不正确。我们把拼写正确的情况记做c(代表correct),拼写错误的情况记做w(代表wrong)。
所谓"拼写检查",就是在发生w的情况下,试图推断出c。从概率论的角度看,就是已知w,然后在若干个备选方案中,找出可能性最大的那个c,也就是求下面这个式子的最大值。
根据贝叶斯定理:
对于所有的备选的来说,对应的都是同一个w,所以它们的P(w)是相同的,因此我们求的其实是的最大值。
P(c)的含义是:某个正确的词的出现“频率”,它可以用“频率”代替。如果我们有一个足够的文本库,那么这个文本库中每个单词的出现频率,就相当于它的发生频率。某个词的出现频率越高,P(c)就越大。
的含义是:在试图拼写c的情况下,出现拼写错误w的概率。这需要统计数据的支持,但是为了简化问题,我们假设两个单词在字形上越接近,就越有可能拼错,就越大。
举例来说,相差一个字母的拼法,就比相差两个字母的拼法,发生概率更高。你想拼写单词hello,那么错误拼成hallo(相差一个字母)的可能性,就比拼成haallo高(相差两个字母)。
所以,我们只要找到与输入单词在字形上最相近的那些词,再在其中挑出出现频率最高的一个,就能实现的最大值。
基于上述分析,我们对拼写检查进行一个简单的模拟:
建立一个小规模的文本库。我们输入luncj,计算目标单词出现概率、字母数量、字母不同、字母排列等指标,求解的最大值。
可以看到matlab输出结果为[12;21;14;3;8],对应单词为lunch。
2.不出门概率
下图为某人以往14天在不同天气状况下是否打网球的信息表格
今天天气如下:
朴素贝叶斯求不出门的概率: