Machine Learning 4 - Naive Bayes朴素贝叶斯算法

0.196字数 4887阅读 1950

2017-11-23@erixhao技术极客TechBooster

AI

系列四,距上篇博文已经近一个半月之久了,是时候再动笔写一篇了,不然无法向几千个公众号读者粉丝交代,感谢大家不掉粉的同时还在增加。

本文将简单介绍在机器学习领域广为使用的朴素贝叶斯算法及其简单实现,属于较为基础普及,高手慎入。

目录

托马斯·贝叶斯(Thomas Bayes)

条件概率

条件概率定义

链式法则

贝叶斯公式

离散型

连续型

贝叶斯概率论

主观概率论

贝叶斯概率论意义

朴素贝叶斯(Naive Bayesian)

工作流程

机器学习中应用

小结

1 托马斯·贝叶斯(Thomas Bayes)

托马斯·贝叶斯(Thomas Bayes),18世纪英国的神学家、数学家;

有趣的是,贝叶斯当年发明发现概率论是为了证明上帝的存在。事实上,在18,19世纪的西方文明,当科学理论研究到一定程度,都会去信奉,投身,研究宗教,神学,究其原因,显然与其所处环境及从小接触宗教,神学有莫大关系,另外引申含义则是当科学研究越深入,到达一定高度后,越觉得大道至简,不可思议,与很多宗教,神学,佛教等观念接近或者一致,世界宇宙高度统一的“大统一场理论”。

2 条件概率

条件概率

条件概率是贝叶斯公式的基础,可以进行些许变换直接推导出贝叶斯公式,有必要仔细推敲研究一下。

数学定义: P(A|B) = P(AB) / P(B)(P(B) > 0)

条件概率指A, B 两个事件,随机事件A在另一个随机事件B已经发生的条件下(事实),其发生的概率,记作P(B|A),等式变换一下:

=> P(AB) = P(A|B) * P(B) = P(B|A) * P(A)

上述蓝色推导出的公式含义是指,事件A和事件B同时发生的概率等于在事件A发生的条件下B也发生的概率乘以事件A发生的概率;或者也等于事件B发生的条件下A也发生的概率乘以事件B发生的概率;

数学家都喜欢玩绕口令,我们还是看图说话吧,一图抵千言:

根据上面的文氏图,可以清楚的看到中间阴影部分表示事件A,B都发生的概率,即联合概率;对于条件概率在事件B发生的情况下,事件A也发生的概率,即P(A|B) 等于中间阴影面积除以B的面积(P(AB)/ P(B):

1) P(A|B)  = P(AB) / P(B)

反之亦然,对于条件概率在事件A发生下,事件B也发生的概率,即P(B|A),同理等于中间阴影面积大小除以A的面积(P(AB)/ P(A):

2) P(B|A) = P(AB) / P(A)

由1),2)变换即得到了我们上面推导出来条件概率公式

P(AB) = P(A) P(B|A) = P(B) P(A|B)

上面的文氏图A, B看起来大小面积一样,容易让人产生误解,我们再看下面一个图更容易理解体会条件概率的含义:

P(A|B), 表示若事件B已经发生,为使A也发生,试验结果必须满足既在B中有在A中的样本点,即此点必定属于AB:

P(A|B)  = P(AB) / P(B)

而中间的交集即联合概率,相对比条件概率,联合概率则要求更高:

P(X=a,Y=b)

首先包含多个条件,并且所有条件同时成立的概率。

链式法则/乘法公式

链式法则或称作乘法法则,通常用于计算多个随机变量的联合概率,特别是在变量之间相互为(条件)独立时会非常有用,我们随后的朴素贝叶斯算法就是借助链式法则展开的。

两个随机变量的联合概率:

对于上边的两个随机变量的联合概率

P(AB) = P(A) P(B|A)

对于N个随机变量的联合概率则如下展开:

即,简写为如下公式:

在实际中使用链式法则时,尤其在机器学习中,则可以较为妥善的选择随机变量的展开顺序,从而可以让概率计算变得更简单,快速🔜。

3贝叶斯公式

Bayes贝叶斯公式

由上述条件概率公式,可以直接得出两个事件的贝叶斯公式如下:

P(B|A) = P(A|B) P(B) / P(A)

or

P(A|B) = P(B|A) P(A) / P(B)

可以看出,贝叶斯公式在描述两个条件概率(事件A在事件B发生的条件下的概率与事件B在事件A发生下的概率)之间的关系,即已知某条件概率,如何得到两个事件交换后的概率, 虽然二者各自的概率大多情况下不一样(如我们上文第二个文氏图所示),而贝叶斯公式则清楚的说明了其二者的确定性关联关系

贝叶斯定理之所以有用,是因为我们在生活中经常可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们建起打通从P(A|B)获得P(B|A)的桥梁。

上文我们只是简单的描述两个独立事件下的条件概率推导出的贝叶斯公式,我们继续扩展到n个离散事件及连续事件。

离散事件 - 贝叶斯公式

假设B是由相互独立的事件组成的概率空间{B1,B2,... Bn};其对应的P(A)由全概率公式展开可以得到:

P(A) = P(A|B1)P(B1) + P(A|B2)P(B2) + ... P(A|Bn)P(Bn)

全概率公式的含义在于,假设事件B1, B2, ... Bn是事件A发生的全部原因,即完备事件组或全概率空间。则对于每个“原因”发生的概率,与该“原因”导致事件A发生的概率乘积的和即为A事件发生的概率。

P(Bi | A) = P(BiA) / P(A) = P(Bi) * P(A|Bi) / P(A)

从而得出贝叶斯公式表示为:

公式中,事件Bi的概率为P(Bi), 事件Bi已经发生下事件A发生的概率为P(A|Bi), 事件A发生条件下事件Bi的概率为P(Bi|A)。

可以看出,贝叶斯公式反映了导致一个事件发生的若干“因素”对这个事件发生的影响程度分别有多大。

连续分布事件 - 贝叶斯公式

上面的例子是基于B事件的分布为离散的,所以分母是求和计算。如果对于参数θ的分布是连续,则要引入积分,即连续分布事件的贝叶斯公式为:

其中,π指的是参数的概率分布,π(θ)指的是先验概率,π(θ|x)指的是后验概率, 即观测到的样本的分布,也就是似然函数(likelihood),后验概率π(θ|x) 是在知道 X的前提下在 Θ域内的一个关于 θ 的概率密度分布。

4贝叶斯概率论


古典统计学中,概率是基于大量实验的,也就是大数定理。对于其他一些事件,如天气预报明天下雨概率80%, 显然古典统计学无法解释了。

说到这里,简单说一下概率领域的分类,按照其计算方法,可以分为古典概率,试验概率和主观概率。

古典概率:假设随机现象所发生事件是有限的,独立的,且每个基本事件发生可能性相等,如掷硬币;无需通过试验即可计算出概率

试验概率:根据大量的,重复的统计试验结果来计算随机事件的概率;存在误差;

主观概率:对于大多无法进行试验观察的事件,如明天的天气状况等,主观概率是观察者而非系统的性质,是观察者对系统处于某中状态的信任程度;主观概率也必须满足概率的基本特征,同时“主观”也需要根据经验,知识,及利用相关信息进行分析,推理,判断而设定的,与“主观臆测”不同。

贝叶斯公式是属于主观概率的,其中P(A)称作A的先验概率(Prior Probability)或边缘概率,即再B事件发生前,对A事件的一个判断;同理P(B)是B的先验概率;P(A|B)称为A后验概率(Posterior Probability),即在事件B发生后,对A事件概率重新评估。同理,P(B|A)称为事件B的后验概率。

P(B|A)/P(B)称为“可能性函数Likelyhood”,称作调整因子,使得预估概率更接近真实概率。事实上,在给定充足信息的情况下,主观概率可以无限逼近客观概率,否则岂不是人类一思考,上帝就笑了?

后验概率 = 先验概率 * 调整因子

如果可能性函数/调整因子 > 1,意味着“先验概率”被增强,事件A发生的可能性变大,如果 = 1 则意味着B事件无助于判断事件A的可能性,如果<1 则意味着“先验概率”被削弱,事件的A的可能性变小。

理论意义

贝叶斯的意义在于,我们可以预先估计一个“先验概率”, 然后加入试验结果,观察这个试验是增强还是削弱了“先验概率”,从而得到更接近事实的“后验概率”。

换言之,贝叶斯公式利用已经搜集到的信息,对原有判断进行修正提供了有效的手段。

无独有偶,在量子理论中的不确定性,以及出现的量子理论的坍塌,而这在几百年前的贝叶斯时代就隐隐有所阐述和理论依据。

近年的科学研究通过把量子理论与贝叶斯模型结合建立了“量子贝叶斯模型”(Quantum Bayesianism),并阐述概率的发生不是物质内在结构决定的,而是与观察者对量子系统不确定性的置信度有关。

在AI领域,贝叶斯方法则是一种非常具有代表性的不确定性知识表示和推理方法。

实践意义

贝叶斯分析的思路对于由证据的积累来推测一个事物发生的概率同样具有重大作用, 它告诉我们当我们要预测一个事物, 我们需要的是首先根据已有的经验和知识推断一个先验概率, 然后在新证据不断积累的情况下调整这个概率, 而这个通过积累证据来得到一个事件发生概率的过程我们则称为贝叶斯分析。

推理用途

贝叶斯公式从另一个角度来看是在“结果”已经发生的条件下,去寻找各种“原因”发生的条件概率。可以说,贝叶斯公式可以帮助追根溯源,可以帮助确定如事件A发生的主要原因,举个例子,某人学习成绩好是结果发生了,我们可以在贝叶斯公式的帮助下,探讨其成绩好的原因是由于“学习环境好”促成的概率有多大。

5 朴素贝叶斯 (Naive Bayesian)


经过上文的长篇铺垫,我们终于过渡到朴素贝叶斯。

顾名思义,朴素贝叶斯是基于上文贝叶斯公式/理论建立的一种用于简单分类的算法,

如下图应用朴素贝叶斯算法进行分类与其他算法的对比效果:

前置模型:

特征值条件独立

基于贝叶斯定理

其中,第一条特征值属性相互独立,而这在现实中大多数情况并不成立,从带来一定影响 ,但在实际应用中,其实际效果却非常理想。

基本思想:

对于给定的待分类项,求解在此项出现的条件下,统计计算各个类别出现的概率,取出现最大概率的作为此待分类项类别。

有个很生动的例子,比如你在大街上看到一个黑人,需要判断他是来自哪里?他可能是欧洲,美国,或者非洲,但我们的大脑潜意识根据“朴素贝叶斯”快速判断他最有可能来自非洲,为什么?因为黑人中非洲的比例最高,概率最大,当然人家也有可能是来自美国美洲的黑人,但在没有其他信息情况下,我们选择当前条件概率最大的。

特征条件独立假设

关于特征条件假设的来龙去脉,我们有必要在具体计算前进一步探索,以样本分类为例:

假设给定训练集(X, Y), 其中每个样本x都包含n维特征,即x = (x1, x2, x3, .... , xn),类别标记集合含有k种类别,即 y = (y1, y2, y3, ... , yk)。

如果对于一个新的样本x, 将如何判断它的类别?从数学角度/概率来看,转换为样本x属于哪个类别的概率最大,有了模型后转化为求解:

P(y1|x), P(y2|x) , ..., P(yk|x) 中最大的那个,即后验概率最大的。

进一步求解P(Yk|X) ,采用贝叶斯定理:

P(yk)是先验概率,可以根据训练集直接计算出来。

而:

它的参数规模是指数数量级,假设第i维度特征值可取个数位Si个,对应类别可取值为k个,则参数个数为:

比如15个样本,2维特征X1,X2, 两种类别-1,1:

对于海量数据集合,计算规模显然无法承受。所以引出了朴素贝叶斯算法针对条件概率分布作的独立性假设,即假设各个维度的特征x1,x2,... , xn相互独立,从而转换为如下公式:

而且对应的参数规模也顺利将到

至此,整理上述公式后即可计算出,并由此得出朴素贝叶斯的分类器表示为:

由于分母都一样,所以最终简化为如下:

实际中,针对我们上文提到的并不是,并且多数无法保证各个特征属性之间的独立性,会做特定处理。如特征属性之间有联系,并且如果是有向无环图,则可以采用贝叶斯分类算法-贝叶斯网络来解决,另外还有半朴素贝叶斯算法

6 工作流程


一图抵千言,与多数的机器学习过程类似,分为准备过程,以确定特征值及分类为主,之后开始训练并生成分类器;最后则可以应用步骤二产生的分类器了。

7 机器学习中应用


拼写提示

各大搜索引擎都会智能分析提示搜索内容,如果用户拼写错误,则会自动给出最佳建议。据称Google的拼写检查就是基于贝叶斯方法的。

如拼写正确代表c,错误代表w,则拼写检查表述为,在发生w事件的情况下,找出最大可能性的c,即求P(c|w)的最大值。

P(c|w) = P(w|c) * P(c)/P(w)

即找出最大化的P(w|c) * P(c)

其中,

P(c)可以用频率来代替,并统计文本库即可

P(w|c)表示,试图拼写c的情况下,拼写错误w的概率,我们假设单词越接近越容易拼写错误,所以转换为只要找到与输入单词最相近的词,再在其中挑出频率最高的一个即可。

邮件分类

邮件分类是比较经典的案例,本周公司进行的Hackathon比赛中,同事也采用了朴素贝叶斯对邮件进行智能分类。

另外在邮件分类中,经常应用之一的过滤垃圾邮件。

1)构建词列表:对文本文档进行按词切分

2)交叉验证:对现有数据划分为训练集和测试集

3)朴素贝叶斯算法计算独立事件概率

4) 计算算法准确率

5)多次重复实验,提高正确率

8 小结


实际上,在机器学习领域,决策树和朴素贝叶斯都是较为广泛应用的算法,并且在某些领域,贝叶斯算法足以与它们相媲美,并具有最小错误率,然而其前提特征值的条件独立性并无法都保证其分类结果,在这种情况下,可以考虑我们上文提到的贝叶斯分类算法-贝叶斯网络来解决,另外还有半朴素贝叶斯算法。

另外,也可以使用回归测试来评估分类器的准确率。


公众号:技术极客TechBooster

孪生公众号:技术 + 金融 = 程序量化投资Venus

推荐阅读更多精彩内容