贝叶斯理论提供了一种计算条件概率的原则方法。使用它我们可以用来轻松计算平常使用直觉经常失败的事件的条件概率。

贝叶斯理论不仅是概率领域中的强大工具,更是被广泛地应用于机器学习领域。包括将其用于概率模型中将模型拟合到训练数据集(简称为最大后验或MAP),以及开发用于分类预测建模问题(例如贝叶斯最优分类器和朴素贝叶斯)的模型。在本文中,您将发现用于计算条件概率的贝叶斯定理及其在机器学习中的使用方式。在学习本文前,推荐大家先学习机器学习中的混淆矩阵。 本文将从以下几个方面进行阐述:

  • 条件概率的贝叶斯定理
  • 常用术语解析
  • 贝叶斯定理实例计算
    • 诊断测试方案
    • 手动计算
    • python 计算

1. 条件概率的贝叶斯定理

在深入探讨贝叶斯定理之前,让我们回顾一下边际,联合和条件概率。

1.1 一般条件概率

边际概率是事件的概率,与其他随机变量无关。如果随机变量是独立变量,则直接为事件的概率;否则,如果变量依赖于其他变量,则边际概率为事件因变量对所有结果的求和的概率,称为总和规则。

  • 边际概率:事件的概率,与其他随机变量,例如P(A)的结果无关。

联合概率是两个(或多个)同时发生的事件的概率,通常用事件A和B来描述两个相关随机变量(例如X和Y)的概率。联合概率通常被概括为结果,例如A和B 。

  • 联合概率:两个(或多个)同时发生的事件的概率,例如P(A和B)或P(A,B)。 条件概率是一个事件在给定另一个事件发生的情况下的概率,通常根据事件A和B从两个相关的随机变量(例如X和Y)来描述。

  • 条件概率:给定另一个事件的发生,一个(或多个)事件的概率,例如P(A给定B)或P(A | B)。 联合概率可以使用条件概率来计算;例如:

  • P(A,B)= P(A | B)* P(B) 这称为乘积规则。重要的是,联合概率是对称的,这意味着:

  • P(A,B)= P(B,A) 条件概率可以使用联合概率来计算。例如:

  • P(A | B)= P(A,B)/ P(B) 条件概率不是对称的。例如:

  • P(A | B)!= P(B | A)

1.2 贝叶斯定理的条件概率

可以使用另一条件概率来计算一个条件概率,贝叶斯定理下的计算方法。例如:

  • P(A | B)= P(B | A)* P(A)/ P(B) 反之亦然。

  • P(B | A)= P(A | B)* P(B)/ P(A) 这种计算条件概率的替代方法在联合概率难以计算时(大部分时间),或者在反向条件概率可用或易于计算时很有用。

条件概率的这种替代计算称为贝叶斯规则或贝叶斯定理,以托马斯·贝叶斯牧师的名字命名,他首先描述了这种情况。在语法上将其称为贝叶斯定理(带撇号)是正确的,但为简单起见,通常省略撇号。

贝叶斯定理(Bayes Theorem):在没有联合概率的情况下计算条件概率的原理方法。 通常情况下,我们无法直接访问分母,例如P(B)。

我们可以用另一种方法来计算它。例如:

  • P(B)= P(B | A)* P(A)+ P(B |非A)* P(非A) 这给出了我们可以使用的贝叶斯定理的公式,该公式使用P(B)的替代计算,如下所述:

  • P(A | B)= P(B | A)* P(A)/ P(B | A)* P(A)+ P(B |非A)* P(非A) 或为清楚起见在分母周围带有方括号:

  • P(A | B)= P(B | A)* P(A)/(P(B | A)* P(A)+ P(B |非A)* P(非A)) 注意:分母只是我们上面给出的扩展。

这样,如果我们有P(A),那么我们可以计算P(非A)作为它的补数。例如:

  • P(非A)= 1 – P(A) 另外,如果我们有P(非B |非A),则可以计算P(B |非A)作为其补数。例如:

  • P(B |非A)= 1 – P(非B |非A) 现在我们已经熟悉了贝叶斯定理的计算,现在让我们仔细看一下方程中各项的含义。

2. 常用术语解析

贝叶斯定理方程中的术语根据使用该方程的上下文而定。

从这些不同的角度考虑计算可能会有所帮助,并有助于将问题映射到方程上。

首先,通常将结果P(A | B)称为后验概率,将P(A)称为先验概率。

P(A | B):后验概率。 P(A):先验概率。 有时将P(B | A)称为可能性,将P(B)称为证据。

P(B | A):可能性。 P(B):证据。 这使得贝叶斯定理可以重述为:

后验=可能性*先验/证据 我们可以用抽烟和癌症的情况清楚地说明这一点。

假设一个人抽烟,那么他得癌症的可能性是多少?

其中P(癌症)是先验概率,P(抽烟| 癌症)是可能性,P(抽烟)是证据:

P(癌症|抽烟)= P(抽烟|癌症)* P(癌症)/ P(抽烟) 您可以想象癌症和抽烟的情况相同。

既然我们已经熟悉了贝叶斯定理和术语的含义及内容,那么让我们看一下可以计算它的场景。

3. 贝叶斯定理实例计算

为了更好的理解贝叶斯定理,我们这里采用一个医学上的实例进行计算说明,下面这是一个癌症诊断测试方案

3.1 诊断测试方案

医学检测手段并不完美,并不是可以百分百做到确认,以cov-19检测试剂为例,假设核酸检测阳性检测率为99%,特异性为98%,人群中患者比例为0.0001,那么如果有一个人检测为阳性,那么该人为新冠肺炎患者的概率为多少?

3.2 手动计算概率

通过前面学习我们知道任何时候都可能存在错误。该测试检测的所有为新冠肺炎患者真的是患者的比例称为灵敏度或真阳性率。

在这种情况下,我们将为测试设计一个灵敏度值。该测试是不错的,但不是很好,真正的阳性率或敏感性为99%。也就是说,在所有有cov-19病毒的人并经过测试的人中,有99%的人将从测试中获得阳性结果。

P(测试=阳性|新冠肺炎=真)= 0.99 有了这些信息,我们的直觉表明一个被诊断为阳性病人患新冠肺炎的可能性为99%。

但是我们的概率直觉是大错特错的。

由于这种解释概率的错误非常普遍,以至于都有自己的名字。它被称为基准利率谬误。

之所以使用此名称,是因为估计事件概率的错误是由于忽略基本速率而引起的。也就是说,不管诊断测试的结果如何,它都忽略了随机选择的人患新冠肺炎的可能性。

在这种情况下,我们已经假定一个人患新冠肺炎的可能性较低,为0.0001,也就是1万个人当中有一个是新冠肺炎患者。

P(新冠肺炎=真)= 0.01%。 使用贝叶斯定理,我们可以正确地计算出给出阳性测试结果的癌症患者的概率。

让我们将方案映射到方程:

  • P(A | B)= P(B | A)* P(A)/ P(B)
  • P(新冠肺炎=真|测试=阳性)= P(测试=阳性|新冠肺炎=真)* P(新冠肺炎=真)/ P(测试=阳性) 我们知道给定患者患有新冠肺炎的患者检测为阳性的概率为99%,我们知道给定患者患有新冠肺炎的基准率或先验概率为0.01%;我们可以将这些值插入:

P(癌症=真|测试=阳性)= 0.99 * 0.0001 / P(测试=阳性) 我们不知道P(测试 = 阳性),它不是直接给出的。

相反,我们可以使用以下方法进行估算:

P(B)= P(B | A)* P(A)+ P(B |非A)* P(非A) P(测试=阳性)= P(测试=阳性|新冠肺炎=真)* P(新冠肺炎=真)+ P(测试=阳性|新冠肺炎=假)* P(新冠肺炎=假) 首先,我们可以计算出P(新冠肺炎=假)作为P(新冠肺炎=真)的计算方法

P(新冠肺炎=真)= 1 – p(新冠肺炎=假) = 1 – 0.0001 = 0.9999 让我们代入计算一下:

我们可以如下插入我们的已知值:

P(测试=阳性)= 0.99 * 0.0001 + P(测试=阳性|新冠肺炎=假)* 0.9999 我们仍然不知道没有新冠肺炎的情况下检测结果呈阳性的可能性。

这需要其他信息。

具体来说,我们需要知道该项检测方法在正确识别没有新冠肺炎的人方面有多出色。也就是说,当患者没有新冠肺炎时(新冠肺炎=假),测试阴性结果(测试 =阴性),称为真阴性率或特异性。

我们前面假设了一个值,设计的特异性值98%。

P(测试=阴性|新冠肺炎=假)= 0.98 有了这最后一条信息,我们就可以将误报率或误报率计算为真正的负率的补充。

P(测试=阳性|新冠肺炎=假)= 1 – P(测试=阴性|新冠肺炎=假) = 1 – 0.98 = 0.02 我们可以将该错误警报率插入我们的P(测试 = 阴性)计算中,如下所示:

P(测试=正)= 0.99 * 0.0001 + 0.02 * 0.9999 P(测试=正)= 0.000099 + 0.019998 P(测试=正)= 0.020097 极好,因此无论该人是否患有新冠肺炎,测试返回阳性结果的可能性约为2%。

现在,我们有足够的信息来计算贝叶斯定理,并估计随机选择的人如果获得阳性测试结果的可能性。

P(新冠肺炎=真|测试=阳性)= P(测试=阳性|新冠肺炎=真)* P(新冠肺炎=真)/ P(测试=阳性) P(新冠肺炎=真|测试=阳性)= 0.99 * 0.0001 / 0.020097 P(新冠肺炎=真|测试=阳性)= 0.000099 / 0.020097 P(新冠肺炎=真|测试=阳性)= 0.0049261083743842365 该计算表明,如果通过此检查告知患者患有新冠肺炎,则只有0.49%的机会患有新冠肺炎。

这是可怕的诊断测试结果,极大的违背了我们的直觉!

该示例还显示,条件概率的计算需要足够的信息。

例如,如果我们已经具有贝叶斯定理中使用的值,则可以直接使用它们。

这种情况很少发生,我们通常必须像在这种情况下那样,计算出所需的数据并将其代入公式。在我们的设计方案中,获得了3条信息,即基本率, 敏感性(或真实阳性率)和特异性(或真实阴性率)。

敏感性:99%的新冠肺炎患者将获得阳性检测结果。 基本比率:0.01%的人患有新冠肺炎。 特异性:98%没有癌症的人会得到阴性测试结果。 我们没有P(测试 = 阳性),但是在给定已有条件的情况下我们可以进行计算获得。

我们可以想象贝叶斯定理可以使我们对给定场景更加精确。例如,如果我们有关于患者(例如他们的年龄)和领域(例如年龄范围的癌症发生率)的更多信息,那么我们可以提供更准确的概率估计。

python 计算

让我们看一下如何使用几行Python代码来计算此精确场景

# 给定P(A), P(B|A), P(B|not A)情况下计算 P(A|B) 
def bayes_theorem(p_a, p_b_given_a, p_b_given_not_a):
	# calculate P(not A)
	not_a = 1 - p_a
	# calculate P(B)
	p_b = p_b_given_a * p_a + p_b_given_not_a * not_a
	# calculate P(A|B)
	p_a_given_b = (p_b_given_a * p_a) / p_b
	return p_a_given_b
 
# P(A)
p_a = 0.0001
# P(B|A)
p_b_given_a = 0.99
# P(B|not A)
p_b_given_not_a = 0.02
# 计算 P(A|B)
result = bayes_theorem(p_a, p_b_given_a, p_b_given_not_a)
# 打印出来
print('P(A|B) = %.3f%%' % (result * 100))
# P(A|B) = 0.493%

总结

本文从条件概率讲起,介绍了如何使用贝叶斯定理计算条件概率,让我们深入认识到真实概率与直觉的差异,实例中,我们假设一个检测试剂达到99%的真阳性率和98%的真阴性率的情况下,一个人群发病概率为0.01的病,被检测为阳性的情况下,竟然还有0.493%的概率为真的患者。希望大家了解不要随便通过直觉作出判断,懂得有一个科学的态度多么重要。