前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >@@@贝叶斯后验概率-用新的信息来调整认知2023.12.5

@@@贝叶斯后验概率-用新的信息来调整认知2023.12.5

作者头像
用户7138673
发布2023-12-13 08:29:49
1330
发布2023-12-13 08:29:49
举报
文章被收录于专栏:大大的小数据大大的小数据

0、对于新信息,

有些人,

我没见过,所有你不对。

我看不懂,所有你不对。

但是,还有一种可能,我看不懂,但是我知道判断他们对不对的方向和突破口在哪里。

1、举例子,接着详细说

https://www.zhihu.com/question/330972557/answer/761885795

有人说「骰子掷一次掷出6的概率为50%,因为只有是6、不是6两种事件」,请问如何反驳?1.9 万赞同 · 929 评论回答

先验假定6点的概率是1/2或者1/6,这两种假设其实是“同样好”的,只要后续信息量接近无穷,它们导致的后验概率就都会收敛于1/6。

2、模拟扔骰子100次

3、计算初始概率是1/2或者1/6,100次的后验概率

绘图

紫线:1/6基准线

红线:初始概率1/2的后验概率

绿线:初始概率1/6的后验概率

蓝线:中6的时候概率上涨,不中6的时候概率下降。

4、可以看到“后验概率就都会收敛于1/6”

红线、绿线都越来越接近紫线

5、并且,红线与绿线之间的差距也越来越小(由第1次的25%差距,降低到100次的1.2337%差距)

红线与紫线在第8次,第15次,第18次就很接近了。(由50%-16.66%=33%的差距,降低到8.33%、4.3%、1.5%)


PS详见程序、数据

# 模拟扔骰子100次

代码语言:javascript
复制
import numpy as np

# 模拟扔骰子100次
np.random.seed(0)  # 设置随机种子以保证结果的可复现性
dice_rolls = np.random.randint(1, 7, 100)  # 生成100次1到6的随机数,代表扔骰子100次的结果

# 设定两个不同的先验概率# 先验 A: P(6) = 1/2,表示为 Beta 分布的参数 (α=2, β=2)# 先验 B: P(6) = 1/6,表示为 Beta 分布的参数 (α=1, β=5)

# 对于每次投掷,更新后验概率

代码语言:javascript
复制
import pandas as pd
from scipy.stats import beta

# 设定两个不同的先验概率
# 先验 A: P(6) = 1/2,表示为 Beta 分布的参数 (α=2, β=2)
# 先验 B: P(6) = 1/6,表示为 Beta 分布的参数 (α=1, β=5)
priors = {
    "A": {"alpha": 2, "beta": 2},
    "B": {"alpha": 1, "beta": 5}
}

# 初始化一个 DataFrame 来存储后验概率的计算结果
posterior_results = pd.DataFrame(columns=["Throw", "Posterior_A", "Posterior_B"])

# 对于每次投掷,更新后验概率
for i in range(1, 101):
    six_count = (dice_rolls[:i] == 6).sum()
    non_six_count = i - six_count

    for prior_label, prior_params in priors.items():
        # 更新后验概率,Beta(alpha + successes, beta + failures)
        alpha_post = prior_params["alpha"] + six_count
        beta_post = prior_params["beta"] + non_six_count
        posterior_mean = alpha_post / (alpha_post + beta_post)

        posterior_results.loc[i, f"Posterior_{prior_label}"] = posterior_mean

posterior_results.tail(10)  # 显示最后10次投掷的后验概率结果

#给出前几步贝叶斯计算的手写公式,

看不懂了

代码语言:javascript
复制
import matplotlib.pyplot as plt
import sympy as sp

# 定义符号
alpha_A, beta_A, alpha_B, beta_B, successes, failures = sp.symbols('alpha_A beta_A alpha_B beta_B successes failures')

# 定义贝塔分布的均值公式
posterior_mean = lambda alpha, beta: alpha / (alpha + beta)

# 定义先验参数
prior_params_A = {alpha_A: 2, beta_A: 2}  # 假设 A
prior_params_B = {alpha_B: 1, beta_B: 5}  # 假设 B

# 定义成功和失败的次数
successes_failures = {successes: 1, failures: 4}  # 1次成功(得到6点),4次失败(未得到6点)

# 计算后验概率的均值
posterior_A = posterior_mean(alpha_A + successes, beta_A + failures).subs(prior_params_A).subs(successes_failures)
posterior_B = posterior_mean(alpha_B + successes, beta_B + failures).subs(prior_params_B).subs(successes_failures)

# 准备绘制手写公式
plt.figure(figsize=(12, 8))
plt.text(0.1, 0.6, f"Posterior (A): {sp.latex(posterior_A)}", fontsize=12, ha='left')
plt.text(0.1, 0.3, f"Posterior (B): {sp.latex(posterior_B)}", fontsize=12, ha='left')
plt.axis('off')
plt.title('Handwritten Bayes Calculation')
plt.show()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大大的小数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档