目录
为什么要学习概率?
统计和概率是不同但又紧密相关的数学领域。
在概率中,我们根据假定的模型或原因,对未来事件做出预测;而在统计中,我们对过去发生的事件中的数据进行分析,从而推断出这些模型或原因是什么。一个是预测数据,另一个是根据数据进行预测。
举个?
“概率论研究的是一个透明箱子,你知道这个箱子的构造(里面有几个红球、几个白球,也就是所谓的分布函数),然后计算下一个摸出来的球是红球的概率。
统计学面对的是一个黑匣子,你只看得到每次摸出来的是红球还是白球,然后需要猜测这个黑匣子的内部结构,例如红球和白球的比例是多少?(参数估计)能不能认为红球40%,白球60%?(假设检验)”
概率论中的许多定理与结论,如大数定理、中心极限定理等保证了统计推断的合理性。做统计推断一般都需要对那个黑箱子做各种各样的假设,这些假设都是概率模型,统计推断实际上就是在估计这些模型的参数。
概率
这节课你学习到概率的一些基本规则。我们可以说掷硬币的结果可以为 T 或 H ,分别作为硬币的反面和正面。
然后基本规则为真:
- P(H)=0.5
- 1 - P(H) =P(not H)=0.5
其中P(not H) 是除了正面以外的事件。既然只会出现两种可能的结果,我们得到 P(not H)=P(T)=0.5. 在随后的概念中,你将看到下列注释: ¬H. - 通过多次掷硬币,我们得到 n 次正面的概率为 。因为这些事件是独立的。
我们从中得到下面两个通用规则:
- 任何事件的概率在 0 和 1 之间,其中包括 0 和 1。
- 互补事件的概率为 1 减去某个事件的概率。其他一切可能事件的概率是 1 减去某个事件本身的概率。因此所有可能事件概率的总和等于 1。
- 如果我们事件是独立的,一系列可能事件的概率是这些事件的乘积。某个事件的概率 AND 下一个事件的概率 AND 下一个事件的概率,即这些事件概率的乘积。
二项分布
二项分布即重复n次独立的伯努利试验。在每次试验中只有两种可能的结果,而且两种结果发生与否互相对立,并且相互独立,与其它各次试验结果无关,事件发生与否的概率在每一次独立试验中都保持不变,则这一系列试验总称为n重伯努利实验,当试验次数为1时,二项分布服从0-1分布。
二项分布 帮助我们决定一系列独立的 '掷硬币等事件' 概率。
与二项分布相关的 概率质量函数 具有以下形式:
, 其中是事件出现的数量。
其中 n 是事件数量, k 是 "成功" 的数量,p 是 "成功" 的概率。
我们现在可以使用这个分布决定下列事件的概率:
- 掷硬币 10 次出现 3 次正面的概率。
- 掷硬币 10 次出现 8 次以上正面的概率。
- 掷硬币 20 次不出现正面的概率。
事实上你可能在实践中处理数据,通常会使用二项分布。所以计算这些概率并不重要 (即使在一些情况下非常有帮助)。更重要的是,你要了解二项分布的用途,因为它出现在机器学习的许多模型中,可以通过跟踪两个可能事件,悄悄接近我们的数据集。二项分布中你看到最流行的地方之一是 逻辑回归。
在接下来的部分中,将开始解决非独立事件。我们目前所见到的事件不会相互影响,但在现实世界中远比这些复杂。
条件概率
条件概率 示例:就是事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B条件下A的概率”。通常事件并不像掷硬币和骰子一样是独立的。实际上,某个事件的结果依赖于之前的事件。
例如,得到阳性检验测试结果的概率依赖于你是否具有某种特殊条件。如果具备条件,测试结果就是阳性的。我们通过以下方式用公式表示任意两个事件的条件概率:
在这个例子中,我们得到下列内容:
贝叶斯法则
贝叶斯定理
贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。其中P(A|B)是在B发生的情况下A发生的可能性。
在贝叶斯法则中,每个名词都有约定俗成的名称:
P(A)是A的先验概率或边缘概率。之所以称为"先验"是因为它不考虑任何B方面的因素。
P(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率。
P(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。
P(B)是B的先验概率或边缘概率,也作标准化常量(normalized constant)。
问题如下:假定人口总体的 1% 患癌。如果患癌,检测结果为阳性的可能性为 90%,如果不患癌,检测结果为阴性的可能性为 90%,在这种情景下,如果你的测试结果为阳性,患癌的概率是多少?
全概率公式
全概率公式为概率论中的重要公式,它将对一复杂事件A的概率求解问题转化为了在不同情况下发生的简单事件的概率的求和问题。
内容:如果事件B1、B2、B3…Bn 构成一个完备事件组,即它们两两互不相容,其和为全集;并且P(Bi)大于0,则对任一事件A有
P(A)=P(A|B1)*P(B1) + P(A|B2)*P(B2) + ... + P(A|Bn)*P(Bn).
(或者:p(A)=P(AB1)+P(AB2)+...+P(ABn)).(其中A与Bn的关系为交)
pythn 概率练习
概率练习
在这个练习中,你将模拟掷硬币和掷骰子,计算下列结果的比例。
np.random.randint(2, size=(int(1e6), 2))
这个是均衡掷硬币时用到,因为它产生的数是等概率的。
np.random.choice([0,1], size=int(1e6),p=[0.3,0.7])
p设置概率,可以设置任何概率。
模拟掷硬币时,0 代表正面,1 代表反面。
1、两次均衡掷硬币得到两次正面
# simulate 1 million tests of two fair coin flips
tests = np.random.randint(2, size=(int(1e6), 2))
# sums of all tests
test_sums = tests.sum(axis=1)
# proportion of tests that produced exactly two heads
(test_sums == 0).mean()
2、三次均衡掷硬币得到一次正面
# simulate 1 million tests of three fair coin flips
tests = np.random.randint(2,size = (int(1e6),3))
# sums of all tests
test_sums = tests.sum(axis = 1)
# proportion of tests that produced exactly one head
(test_sums == 2).mean()
3、P(H) = 0.6 时三次非均衡掷硬币得到一次正面
# simulate 1 million tests of three biased coin flips
# hint: use np.random.choice()
tests = np.random.choice([0,1],size = (int(1e6),3),p=[0.6,0.4])
# sums of all tests
test_sums = tests.sum(axis = 1)
# proportion of tests that produced exactly one head
(test_sums == 2).mean()
4、一次掷骰子得到偶数
# simulate 1 million tests of one die roll
tests = np.random.choice(np.arange(1, 7), size=int(1e6))
# proportion of tests that produced an even number
(tests % 2 == 0).mean()
5、两次掷骰子得到相同值
# simulate the first million die rolls
first = np.random.choice(np.arange(6), size=int(1e6))
# simulate the second million die rolls
second = np.random.choice(np.arange(6), size=int(1e6))
# proportion of tests where the 1st and 2nd die rolled the same number
(first == second).mean()
二项分布练习
在这个测试中,你将使用 np.random.binomial
计算下列结果的比例。
tests = np.random.binomial(10,0.5,5)
10表示每一次伯努利试验的次数,就比如掷10次硬币算一次试验。
0.5表示事件成功的概率,5表示进行5次伯努利试验。
返回每次试验成功的次数,3表投10次硬币正面朝上的次数。
array([3, 4, 3, 5, 6])
tests == 3
array([ True, False, True, False, False], dtype=bool)
(tests == 3).mean()
0.4
1、一次均衡掷硬币得到正面
# simulate 1 million tests of one fair coin flip
# remember, the output of these tests are the # successes, or # heads
tests = np.random.binomial(1, 0.5, int(1e6))
# proportion of tests that produced heads
(tests == 1).mean()
五次均衡掷硬币得到一次正面
2、十次均衡掷硬币得到四次正面
# simulate 1 million tests of ten fair coin flips
tests = np.random.binomial(10,0.5,int(1e6))
# proportion of tests that produced 4 heads
(tests == 4).mean()
3、P(H) = 0.8 时五次不均衡掷硬币得到五次正面
# simulate 1 million tests of five biased coin flips
tests = np.random.binomial(5,0.8,int(1e6))
# proportion of tests that produced 5 heads
(tests == 5).mean()
4、P(H) = 0.15 时十次不均衡掷硬币得到得到三次及三次以上正面
# simulate 1 million tests of ten biased coin flips
tests = np.random.binomial(10,0.15,int(1e6))
# proportion of tests that produced at least 3 heads
(tests>=3).mean()
癌症测试结果
在这部分,你会看到病人癌症测试结果和是否真正患癌症的模拟数据集。 cancer_test_data.csv
总共有多少病人?2914
df.shape
多少病人患癌症?306
# number of patients with cancer
df.has_cancer.sum()
多少病人没有患癌症?2608
# number of patients without cancer
(df.has_cancer == False).sum()
患癌症的病人比例是多少?0.105
# proportion of patients with cancer
df.has_cancer.mean()
没有患癌症的病人比例是多少?0.895
# proportion of patients without cancer
1 - df.has_cancer.mean()
癌症患者测试为阳性的病人比例是多少?0.905
# proportion of patients with cancer who test positive
(df.query('has_cancer')['test_result'] == 'Positive').mean()
癌症患者测试为阴性的病人比例是多少?0.095
# proportion of patients with cancer who test negative
(df.query('has_cancer')['test_result'] == 'Negative').mean()
非癌症患者测试为阳性的病人比例是多少?0.204
# proportion of patients without cancer who test positive
(df.query('has_cancer == False')['test_result'] == 'Positive').mean()
df.query('has_cancer == False').head()
非癌症患者测试为阴性的病人比例是多少?0.796
# proportion of patients without cancer who test negative
(df.query('has_cancer == False')['test_result'] == 'Negative').mean()
总结:sum()经常被用来对布尔型数组中的True值计数,mean()被用来计算布尔型数组中的True值占整个数组的比例。
条件概率与贝叶斯规则测试
在前面部分中,你在癌症结果数据集中发现了以下比例。
- 患癌症病人: 0.105
- 没有患癌症病人: 0.895
- 检测结果为阳性的患癌病人: 0.905
- 检测结果为阴性的患癌病人: 0.095
- 没有患癌但检测结果为阳性的病人概率:0.204
- 没有患癌且检测结果为阴性的病人概率: 0.796
根据观察数据中的上述比例,我们可以假定以下概率。
概率 | 含义 |
---|---|
P(cancer) = 0.105 | 患癌症病人的概率 |
P(~cancer) = 0.895 | 没有患癌症病人的概率 |
P(positive|cancer) = 0.905 | 检测结果为阳性的患癌病人概率 |
P(negative|cancer) = 0.095 | 检测结果为阴性的患癌病人概率 |
P(positive|~cancer) = 0.204 | 没有患癌但检测结果为阳性的病人概率 |
P(negative|~cancer) = 0.796 | 没有患癌且检测结果为阴性的病人概率 |
练习问题
利用上面的概率和贝叶斯规则,计算下面的概率。
1、检测结果为阳性的病人患癌概率,或 P(cancer|positive)
# What proportion of patients who tested positive has cancer?
df.query('test_result == "Positive"')['has_cancer'].mean()
2、检测结果为阳性的病人没有患癌概率,或 P(~cancer|positive)
# What proportion of patients who tested positive without cancer?
1 - df.query('test_result == "Positive"')['has_cancer'].mean()
3、检测结果为阴性的病人患癌概率,或 P(cancer|negative)
# What proportion of patients who tested negative has cancer?
df.query('test_result == "Negative"')['has_cancer'].mean()
4、检测结果为阴性的病人没有患癌概率,或 P(~cancer|negative)
# What proportion of patients who tested negative doesn't have cancer?
1 - df.query('test_result == "Negative"')['has_cancer'].mean()