贝叶斯定理证明:直觉未必正确

直觉是否是第六感,尚且不得而知,仿佛是灵机一动,又或者突然有所感,但从深层次去分析,或许还是来自生活的经验。这些经验未必是自己亲身体验,多数还是道听途说,又或者是被看似真实实则虚假的数据欺骗了。一个例子让数学定理如何证明直觉之虚妄。

让我们先来看看生活中的一个小例子。假设有某种疾病D,在10000人中会有1人患此病;又假设对患此病的人进行测试,测试为阳性的比例达到99%,也就是说100名患者中,有99名患者检测结果皆为阳性(positive)。问题:

在检测为阳性的情况下,某一个人确定患该病的概率是多少?

不用仔细思考,先用自己的直觉判断,概率高还是低?再结合数据认真思考,你得到的概率值会是多少呢?我想,或许绝大部分人的第一反应是:在检测为阳性的情况下,基本就可以确诊身患D病了。再结合前面给出的数据进行运算,会非常容易地得到答案为99%。这是显而易见的吧,100名患者99名都检测为阳性,那么,——不是反之亦然么?

显然,直觉欺骗了我们。上述数据营造了一种假象,让我们忽略了未患D病的人检测为阳性所占的比例。

让我们把数据增大,假设有一百万人。在这个基数下,患D病的人有100人。在这100人中,检测为阳性的人为99人。现在考虑未患D病的人数,一百万减去一百,得到的人数为999900。根据检测阳性的比例,检测这些人时,会有1%的几率会检测为阳性,人数为999900*1%等于9999人。于是,我们可以计算出患D病且检测为阳性的人在所有检测为阳性的人中所占的比例为:99/99+9999,结果才不到1%。

这样结果真让人莫名惊诧了。换言之,我们可以下结论说:当某个人检测为阳性时,断定他(她)患D病的几率仅仅为0.98%。那么说,这样的检测给医生的参考依据几乎可以忽略不计啊!为什么会这样?——从概率学的角度讲,这其实是贝叶斯定理(Bayes's Theorem)的体现。

首先我们将患病的事件记做D,检测为阳性的事件记做T。如果患病的事件没有发生,则称为“Not D”,符号记为:¬D。同理,检测不为阳性的事件可以记为¬T。

如果记D、T都发生的概率为P(D,T),则有公式:

P(D,T) = P(D|T)/P(T)

其中P(D|T)为当T发生时,D发生的概率,这一概率被称之为事件D关于事件T的条件概率(Conditional probability)。由于P(D,T) = P(T,D) = P(T|D)/P(D),因而条件概率的公式可以记为:

P(D|T) = P(D,T)/P(T) = P(T|D)P(D)/P(T)

我们再将事件D拆分为D和¬D,则P(T)可以记为:

P(T) = P(T,D) + P(T,¬D)

这个公式是一个公理,因为在具有D、T两个事件的情况下,P(T)必然只存在两种情况,要么在T发生时,D也发生;要么在T发生时,D没有发生。那么贝叶斯定理就可以记为:

P(D|T) = P(T|D)P(D)/[P(T|D)P(D) + P(T|¬D)(P¬D)]

现在我们可以计算P(D|T),即测试为阳性时,患D病的概率值了。我们已知:

  • P(T|D):当患D病时,检测为阳性的概率为0.99;
  • P(D):10000个人有1个人患D病,则概率为1/10000=0.0001;
  • P(T|¬D):没有患D病时,检测为阳性的概率为1-0.99=0.01;
  • P(¬D):没有患D病的概率为1-0.0001=0.9999。

计算上面的公式,P(D|T)等于0.98%。符合我们前面的分析。然而我们的直觉呢?简直溃败而不成军了。

注:上面所述D与T之间关系乃理想状态,判断一个人是否生病,检测是否阳性、阴性仅仅为其中一个要素。例如当我们再增加一个症状事件S后,同时满足T与S的前提,则D发生的概率值就会显著增加。

原文发布于微信公众号 - 逸言(YiYan_OneWord)

原文发表时间:2015-09-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏上善若水

014 linux 命令行工具jq

795
来自专栏陈满iOS

iOS框架·Masonry源码深度解析及学习启示:设计模式与链式编程思想

可见,系统传统的代码布局有点繁琐。为了简化上述传统布局代码,被广泛应用的第三方框架 Masonry 对AutoLayout 进行了封装,Swift版则是 Sna...

722
来自专栏desperate633

LintCode 形状工厂题目代码

工厂模式是一种常见的设计模式。实现一个形状工厂 ShapeFactory 来创建不同的形状类。这里我们假设只有三角形,正方形和矩形三种形状。

722
来自专栏菩提树下的杨过

objective-C 的OOP(上)--类定义、继承及方法调用

上一篇展示了如何用传统的“面向过程编程方法”,实现画“矩形”、“圆”、“椭圆”,这一篇看下如何改用OOP的方法来实现: ? 因为要用到“颜色”以及“矩形区域”二...

1568
来自专栏mukekeheart的iOS之旅

iOS学习——布局利器Masonry框架源码深度剖析

  iOS开发过程中很大一部分内容就是界面布局和跳转,iOS的布局方式也经历了 显式坐标定位方式 --> autoresizingMask --> iOS 6....

3989
来自专栏移动开发面面观

iOS自动布局——Masonry详解

1452
来自专栏菩提树下的杨过

java中的tuple实现

java中没有类似c#、scala中的tuple元组类,只能自己动手,丰衣足食了,见下面的代码: Tuple 抽象类 1 import java.util.O...

1785
来自专栏技术总结

金额跳动动画效果

773
来自专栏ios 技术积累

ios 扩大UIButton点击范围

先了解Hit-Test请看上一篇文章 https://www.jianshu.com/writer#/notebooks/4989829/notes/3314...

1012
来自专栏MelonTeam专栏

走进 Masonry

导语 Masonry 源码阅读 在阅读这篇文章之前,你需要对两块东西有明确的了解 1、AutoLayout, 至少能够知道并使用过 /* Cr...

1969

扫码关注云+社区