赞
踩
目录
统计和概率是不同但又紧密相关的数学领域。
在概率中,我们根据假定的模型或原因,对未来事件做出预测;而在统计中,我们对过去发生的事件中的数据进行分析,从而推断出这些模型或原因是什么。一个是预测数据,另一个是根据数据进行预测。
“概率论研究的是一个透明箱子,你知道这个箱子的构造(里面有几个红球、几个白球,也就是所谓的分布函数),然后计算下一个摸出来的球是红球的概率。
统计学面对的是一个黑匣子,你只看得到每次摸出来的是红球还是白球,然后需要猜测这个黑匣子的内部结构,例如红球和白球的比例是多少?(参数估计)能不能认为红球40%,白球60%?(假设检验)”
概率论中的许多定理与结论,如大数定理、中心极限定理等保证了统计推断的合理性。做统计推断一般都需要对那个黑箱子做各种各样的假设,这些假设都是概率模型,统计推断实际上就是在估计这些模型的参数。
这节课你学习到概率的一些基本规则。我们可以说掷硬币的结果可以为 T 或 H ,分别作为硬币的反面和正面。
然后基本规则为真:
我们从中得到下面两个通用规则:
二项分布即重复n次独立的伯努利试验。在每次试验中只有两种可能的结果,而且两种结果发生与否互相对立,并且相互独立,与其它各次试验结果无关,事件发生与否的概率在每一次独立试验中都保持不变,则这一系列试验总称为n重伯努利实验,当试验次数为1时,二项分布服从0-1分布。
二项分布 帮助我们决定一系列独立的 '掷硬币等事件' 概率。
与二项分布相关的 概率质量函数 具有以下形式:
, 其中是事件出现的数量。
其中 n 是事件数量, k 是 "成功" 的数量,p 是 "成功" 的概率。
我们现在可以使用这个分布决定下列事件的概率:
事实上你可能在实践中处理数据,通常会使用二项分布。所以计算这些概率并不重要 (即使在一些情况下非常有帮助)。更重要的是,你要了解二项分布的用途,因为它出现在机器学习的许多模型中,可以通过跟踪两个可能事件,悄悄接近我们的数据集。二项分布中你看到最流行的地方之一是 逻辑回归。
在接下来的部分中,将开始解决非独立事件。我们目前所见到的事件不会相互影响,但在现实世界中远比这些复杂。
条件概率 示例:就是事件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的关系为交)
在这个练习中,你将模拟掷硬币和掷骰子,计算下列结果的比例。
- 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值占整个数组的比例。
在前面部分中,你在癌症结果数据集中发现了以下比例。
根据观察数据中的上述比例,我们可以假定以下概率。
概率 | 含义 |
---|---|
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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。