zoukankan      html  css  js  c++  java
  • 贝叶斯定理与直觉

    本文为阅读Data Science from Scratch之笔记,文中案例、公式分析皆来自此书

    让我们先来看看生活中的一个小例子。假设有某种疾病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发生的概率值就会显著增加。

  • 相关阅读:
    Android 开发 深入理解Handler、Looper、Messagequeue 转载
    Android 开发 Handler的基本使用
    Java 学习 注解
    Android 开发 AlarmManager 定时器
    Android 开发 框架系列 百度语音合成
    Android 开发 框架系列 Google的ORM框架 Room
    Android 开发 VectorDrawable 矢量图 (三)矢量图动画
    Android 开发 VectorDrawable 矢量图 (二)了解矢量图属性与绘制
    Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图
    Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID
  • 原文地址:https://www.cnblogs.com/wayfarer/p/5450877.html
Copyright © 2011-2022 走看看