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次
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)
# 对于每次投掷,更新后验概率
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次投掷的后验概率结果
#给出前几步贝叶斯计算的手写公式,
看不懂了
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()