基于贝叶斯方法的统计回归性机器学习与分析


在开始这篇文章前,我觉得应该先给大家介绍下贝叶斯这个人,毕竟正是这哥们发明了我们现在所谈到的贝叶斯方法。贝叶斯是一个英国牧师,同时他还是一个业余数学家。生活在18世纪的贝叶斯生前是位受人尊敬英格兰长老会牧师,一心一意的把自己献给伟大的主(搞毛线啊!泡妞才是正途好吗?)。而且呢,出于对上帝的敬仰,他踏上了证明上帝存在的道路(准确说,应该是不归路!  -_-// )。当然他的理想过于伟大,所以到现在也没有人能够帮助他解决。然而,有心栽花花不开,无心插柳柳成荫!虽然一直到最后他都 没有证明上帝是存在的,但是他证明上帝存在的过程中,却无意发明了概率统计学原理,这应该也算是上帝对人类文明发展所做的贡献吧!!!

接下来开始进入正题,其为大家介绍贝叶斯公式。其实贝叶斯公式并不神秘,基于全变量的贝叶斯公式就是

这就是贝叶斯的全变量公式。 在接下来的内容中,我们着重介绍基于单变量或双变量(多变量统一为双变量),所以这样复杂的公式大可不必。那么我们接下来就在实际应用中来简化贝叶斯公式。

贝叶斯模型的简单机器学习应用

贝叶斯方法应用最多的领域是机器学习,我们也以机器学习举例。假设有一个英文输入软件,小明同学某一天正好在用这个软件。但是,小明同学的英语水平实在不怎么样(可能是经常被老师赶到门外去的原因吧 ^_^),所以呢,小明同学输入了一个单词“teache” 。输入软件看见这个单词是崩溃的,因为他并不认识这个单词!这个单词到底是“teacher”还是“teach”呢?我们当然知道是 “teacher”(毕竟我们知道小明每天的经历)。可是输入软件却不知道!这个时候就该贝叶斯方法上场了。假设小明同学输入的单词是“W”,而推测他想要输入的单词是“W1,W2,W3”,"W(N)"在所有单词中的词频为P(W(N)),而在输入“W(N)”时错误输入为“W”的概率为P(W/W(N)),那么对于每一个可能的选择,我们都可以做出判断:P(T(W(N)) = P(W(N))*P(W/W(N)),然后依次比较就可以判断出最有可能的选择。

那么简化“贝叶斯方法在机器学习中的应用模型”得:P(MAY_ANS) = P(ANS)/P(ANS/INPUT)。P(ANS)为想要输入的单词在所有单词中的词频(先验概率),P(ANS/INPUT)为想要输入ANS却输入INPUT的概率(似然率),P(MAY_ANS)为推测的输入结果的概率(后验概率)。而这样之后,就可以在所有的可能中给出最有可能的选择。

最优贝叶斯模型

回到刚刚的推理,对于刚刚的推理,我们可以将它分为两个过程,第一步是对观测数据建立一个模型。第二步则是使用这个模型来推测未知现象发生的概率。我们刚刚计算的时候,都是假设我们所选用的模型就是最优模型。但是很多时候,虽然某个模型是所有模型里面最靠谱的,但是别的模型也并不是一点机会都没有。因为,不同的模型之所以对每一数据的反应不一,是因为其选择的算法不同,但是每一完全正确的算法,也同样没有完全错误的选择。所以,当我们选择了一个模型的时候,通常还可以选择其他的模型。比如,对同一事件A模型给出的概率是0.5,B模型的概率是0.6,而C模型的概率是0.3。而所谓的最优贝叶斯推理就是将三个模型对于未知数据的预测结论加权平均起来(权值就是模型相应的概率)。显然,这个推理已经是最好的选择了,因为它考虑了所有的可能性。(当然在实际中我们是基本不这样做的,一是模型可能很费时,二来模型空间可能是连续的。结果还是非常费时间。所以这个被看作是一个理论基准。)

朴素贝叶斯方法

在机器学习中,经常还有这种情况。比如:我们需要对邮箱中的垃圾邮件与正常邮件进行区分;对一片文章的主题进行归类………我们用朴素贝叶斯在垃圾邮件过滤中的应用来举例说明。问题是什么?问题是,给定一封邮件,判定它是否属于垃圾邮件。按照先例,我们还是用 D 来表示这封邮件,注意 D 由 N 个单词组成。我们用 h+ 来表示垃圾邮件,h- 表示正常邮件。问题可以形式化地描述为求:

P(h+|D) = P(h+) * P(D|h+) / P(D)

P(h-|D) = P(h-) * P(D|h-) / P(D)

其中 P(h+) 和 P(h-) 这两个先验概率都是很容易求出来的,只需要计算一个邮件库里面垃圾邮件和正常邮件的比例就行了。然而 P(D|h+)却不容易求,因为 D 里面含有 N 个单词 d1, d2, d3, .. ,所以P(D|h+) = P(d1,d2,..,dn|h+)。我们又一次遇到了数据稀疏性,为什么这么说呢?P(d1,d2,..,dn|h+)

就是说在垃圾邮件当中出现跟我们目前这封邮件一模一样的一封邮件的概率是多大!开玩笑,每封邮件都是不同的,世界上有无穷多封邮件。瞧,这就是数据稀疏性,因为可以肯定地说,你收集的训练数据库不管里面含了多少封邮件,也不可能找出一封跟目前这封一模一样的。结果呢?我们又该如何来计算

P(d1,d2,..,dn|h+) 呢?

我们将 P(d1,d2,..,dn|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这个单词在垃圾邮件中出现的频率即可。关于贝叶斯垃圾邮件过滤更多的内容可以参考这个条目,注意其中提到的其他资料。

点注记:这里,为什么有这个数据稀疏问题,还是因为统计学习方法工作在浅层面,世界上的单词就算不再变多也是非常之多的,单词之间组成的句子也是变化多端,更不用说一篇文章了,文章数目则是无穷的,所以在这个层面作统计,肯定要被数据稀疏性困扰。我们要注意,虽然句子和文章的数目是无限的,然而就拿邮件来说,如果我们只关心邮件中句子的语义(进而更高抽象层面的“意图”(语义,意图如何可计算地定义出来是一个人工智能问题),在这个层面上可能性便大大缩减了,我们关心的抽象层面越高,可能性越小。单词集合和句子的对应是多对一的,句子和语义的对应又是多对一的,语义和意图的对应还是多对一的,这是个层级体系。神经科学的发现也表明大脑的皮层大致有一种层级结构,对应着越来越抽象的各个层面,至于如何具体实现一个可放在计算机内的大脑皮层,仍然是一个未解决问题,以上只是一个原则(principle)上的认识,只有当 computational 的 cortex模型被建立起来了之后才可能将其放入电脑。

朴素贝叶斯方法的条件独立假设看上去很傻很天真,为什么结果却很好很强大呢?就拿一个句子来说,我们怎么能鲁莽地声称其中任意一个单词出现的概率只受到它前面的 3 个或 4 个单词的影响呢?别说 3 个,有时候一个单词的概率受到上一句话的影响都是绝对可能的。那么为什么这个假设在实际中的表现却不比决策树差呢?有人对此提出了一个理论解释,并且建立了什么时候朴素贝叶斯的效果能够等价于非朴素贝叶斯的充要条件,这个解释的核心就是:有些独立假设在各个分类之间的分布都是均匀的所以对于似然的相对大小不产生影响;即便不是如此,也有很大的可能性各个独立假设所产生的消极影响或积极影响互相抵消,最终导致结果受到的影响不大 (这个部分直接引用的刘大的独立博客)

层级贝叶斯方法

我也不懂,再说了~~~~~

推荐阅读更多精彩内容