贝叶斯定理在数据时代的应用

通常情况下我们一个人的直觉是从原因推断出结果,比如说不吃饭就会饿肚子,晚上不睡觉第二天会困。但其实很多时候因和果之间的关系不是确定事件,而是一个概率事件,比如一个人年轻的时候很穷,和他十年之后同样很穷,不是因果关系而是概率关系。

我们的经验中比较熟悉的是当一个原因发生时结果出现的概率,例如当你感冒后会发烧的概率,但我们的直觉不太会把握逆概率,即知道结果要求推出原因的概率,也就是要判断发烧是感冒引起的概率。贝叶斯定理就是教我们怎么算这样的概率。举个例子,某人去医院检查身体时发现艾滋病病毒筛查呈阳性,现在告诉你一个艾滋病病人检查结果呈阳性的概率事99%,也就是只要你是艾滋病病人,检查结果基本都呈阳性,还告诉你,人群中艾滋病患者大约是0.3%,但所有人筛查出阳性的人有2%,现在问这个人得艾滋病的概率有多大?你的直觉反应可能是,完了,要出大事了!现在我们看看贝叶斯定理怎么说:

P(得艾滋病 | 检查呈阳性) = P(得艾滋病) × P(检查呈阳性 | 得艾滋病) / P(检查呈阳性) = 99%×0.3%/2% = 14.85%

也就是说即使他检查呈阳性,得病的概率也不到15%!这个结果非常违反直觉。原因在哪里?在于人群中查呈阳性的概率远大于人群中得艾滋病的概率。这个主要原因是检查手段不准确,会“冤枉”很多好人。所以以后不管谁查出了什么病呈阳性,你要问的第一件事是检查呈阳性和得病的比率有多大,这个比例越大就可以越淡定,所以贝叶斯定理告诉我们的基本道理是:一个结果可能有很多原因造成的,要知道一个结果是由哪个原因造成的,一定要先知道这个原因在所有原因中的占比。

一个好的医生知道,要判断病人是否感冒,只看是否发烧这一症状是不够的,还要看是否有咳嗽、嗓子痛、流鼻涕等症状。也就是我们要知道P(感冒 | 发烧、嗓子痛、咳嗽…)。贝叶斯定理告诉我们计算上面的概率可以通过计算P( 发烧、咳嗽、嗓子痛… | 感冒)获得。为了简化计算,我们这里假设发烧、咳嗽、嗓子痛、头痛等这些症状是相互独立的(很显然这不一定正确,很有可能嗓子痛是因为咳嗽引起的),这样P(发烧、咳嗽、嗓子痛、头痛… | 感冒) = P(发烧 | 感冒) × P(咳嗽 | 感冒) × …

这里每一个概率都比较容易获得,在机器学习里叫做朴素贝叶斯分类器。这个分类器广泛应用于垃圾邮件的过滤,我们知道垃圾邮件往往会有“免费、中奖、发财”这类词汇,这类词汇就相当于感冒会出现的症状,垃圾邮件就相当于感冒。过滤垃圾邮件就变成了判断出现在出现这类词汇的情况下这封邮件是垃圾邮件的概率,也就是通过统计P(出现“免费” | 垃圾邮件), P(出现“中奖” | 垃圾邮件)等的概率,来算出P(垃圾邮件 | 出现“免费、中奖、发财…”)的概率。

同样的原因还被广泛应用在语音识别上。一个单词有各种各样的发音,语音识别就是听到一个发音判断是某个单词的概率。如果我们把“吃饭”这个词天南地北男女老少的发音都收集起来,统计出“吃饭”这个词各种发音的频次,我们听到一个发音“恰饭”时,就可以判断是否在说“吃饭”了。

为什么贝叶斯定理在数据时代有很广泛的应用呢?因为它是通过采集大量数据统计出每个单词和它们分别对应的发音频率来判断一个发音是什么单词的。这些数据越多,判断的准确性就越高。

在贝叶斯定理中,“知识”是知道当一个结果发生时是哪些原因造成的。这些知识被清晰的表达为一个条件概率。机器通过统计每种原因的占比来算出从结果到原因的概率。