统计_古典概型,条件概率,贝叶斯公式(Datawhale概率统计温习1)

一、古典概率之同班同学至少有一对同一天生日概率

1.1 两个基本概念

  • 事件概率
    P ( A ) = m n = 事 件 A 包 含 的 基 本 事 件 数 基 本 事 件 总 数 P(A) = \frac{m} {n} = \frac{事件A包含的基本事件数} {基本事件总数} P(A)=nm=A
  • 反事件概率
    P ( A ‾ ) = 1 − P ( A ) P(\overline{A})=1-P(A) P(A)=1P(A)

1.2 问题分析

我们只要求出,每个同学生日都不一样的概率,然后1减去该概率就是我们要求的概率。

一个班级有K个同学,假定随机在365天内的某一天出生(极端情况:K个同学均在某一天出生。 也可能出现)。我们需要计算的事件是:
A : K个同学,每个人出生的时间不同。

可以将A 分解成两部分:
A1: 从365天中 随机抽取K 天 -->> C 365 k C^k_{365} C365k
A2: k天中每一天都有一个人出生 -->> 全排列 : k ! k! k!

全事件为:K个同学在365天中的出生的所有可能,即每个人都有365个可能
36 5 k 365^k 365k

1.3 问题求解

因此:
P ( A ) = A 1 ∗ A 2 A l l = C 365 k ∗ k ! 36 5 k = 365 ! ∗ k ! ( 365 − k ) ! ∗ 36 5 k = 365 ! ( 365 − k ) ! ∗ 36 5 k P(A) = \frac{A_1*A_2}{All}=\frac{C^k_{365}*k!}{365^k}=\frac{365!*k!}{(365-k)!*365^k}=\frac{365!}{(365-k)!*365^k} P(A)=AllA1A2=365kC365kk!=(365k)!365k365!k!=(365k)!365k365!

python简单实现:

def n_1(n):
    if n == 1:
        return 1
    return n * n_1(n-1)

def A_mn(m, n):
    return n_1(n) / n_1(n - m)

def C_mn(m, n):
    # A_mn/n_1(m)
    return n_1(n) / (n_1(m) * n_1(n - m))

# 假设有 40 个同学
k=40
p_a = C_mn(k, 365) * n_1(k) / 365**k
print('1 - p_a:', 1 - p_a)
"""
>>> print('1 - p_a:', 1 - p_a)
1 - p_a: 0.891231809817949
"""

由此可知,显然同班同学至少有一对同一天生日的概率是非常高的。

二、贝叶斯:有一人呈阳性反应,则此人确为肝癌患者的概率是多少

贝叶斯可以查看之前写的文章: 图解贝叶斯定理迭代学习

假定用血清甲胎蛋白法诊断肝癌。
C C C : 表示被检验者有肝癌这一事件
A A A : 表示被检验者为阳性反应这一事件
当前有肝癌的患者被检测呈阳性反应的概率为0.95。即 P ( A ∣ C ) = 0.95 P(A|C) = 0.95 P(AC)=0.95
当前非肝癌的患者被检测呈阴性反应的概率为0.9。即 P ( A ‾ ∣ C ‾ ) = 0.90 P(\overline {A}|\overline {C}) = 0.90 P(AC)=0.90
若某人群中肝癌患者概率为0.0004,即 P ( C ) = 0.0004 P(C) = 0.0004 P(C)=0.0004,现在有一人呈阳性反应,求此人确为肝癌患者的概率是多少?

2.1 问题分析

显然我们要求的是 P ( C ∣ A ) P(C|A) P(CA)
存在两个事件:
X1: 被检测出有肝癌 P ( C ) = 0.0004 P(C)=0.0004 P(C)=0.0004
X2: 未被检测出有肝癌 P ( C ‾ ) = 1 − 0.0004 P(\overline {C})=1-0.0004 P(C)=10.0004

X1的似然度: P ( A ∣ C ) = 0.95 P(A|C) = 0.95 P(AC)=0.95
X2的似然度: P ( A ∣ C ‾ ) = 0.1 P(A|\overline {C}) = 0.1 P(AC)=0.1

2.2 问题求解

P ( C ∣ A ) = P ( C ) P ( A ∣ C ) P ( C ) P ( A ∣ C ) + P ( C ‾ ) P ( A ∣ C ‾ ) = 0.0004 ∗ 0.95 0.0004 ∗ 0.95 + 0.9996 ∗ 0.1 = 0.0038 P(C|A) = \frac {P(C)P(A|C)} {P(C)P(A|C)+P(\overline {C} )P(A|\overline {C})} =\frac {0.0004*0.95}{0.0004*0.95 + 0.9996*0.1} =0.0038 P(CA)=P(C)P(AC)+P(C)P(AC)P(C)P(AC)=0.00040.95+0.99960.10.00040.95=0.0038

2.3.1 python贝叶斯框架

参考学习 《贝叶斯思维:统计建模的PYTHON学习法》



class Smpl_bayes():
    def __init__(self, hypos_dct):
        self.d = hypos_dct

    def Upadate(self, data):
        """
        根据似然更新分布
        """
        for hypo, p in self.d.items():
            like = self.Likelihood(data, hypo)
            self.Mult(hypo, like)
        self.Normalize()

    def Likelihood(self, data, hypo):
    	"""
    	一般似然函数 都依据具体情况而定
    	"""
        like_dct = {
            'A|C' : 0.95,
            'A_|C': 0.05,
            'A|C_': 0.1,
            'A_|C_': 0.9
        }
        like_str = f'{data}|{hypo}'
        return like_dct[like_str]

    def Set(self, hypo, p):
        self.d[hypo] = p 
    
    def Mult(self, hypo, factor):
        self.Set(hypo, self.d.get(hypo, 0) * factor)

    def Normalize(self):
        total = sum(self.d.values())
        for hypo, p in self.d.items():
            self.Set(hypo, p/total)
        

cancer_distr = Smpl_bayes({'C': 0.0004, 'C_': 1-0.0004})
cancer_distr.Upadate('A') # 对事件C update 可以求 P(C|A)  P(C_|A)

cancer_distr.d
"""
>>> cancer_distr.d
{'C': 0.003787123779150887, 'C_': 0.9962128762208491}
"""

基于检测结果 就 检测方法评估(后验概率) 。可见在医学上仅仅用该检测方法去确认是肝癌是不可取的需要再借鉴其他指标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scc_hy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值