剧情背景
在《庆余年2》中史家镇是李云睿和二皇子向北齐走私的重要通道,太子派人把史家镇烧成灰烬,最后嫁祸于二皇子,加大范闲对二皇子的恨意,坐收渔翁之利,意图销毁所有证据。范闲痛心疾首,但是马上调整,拿出高考备考的心态,在被毁的镇子里找到蛛丝马迹,通过贝叶斯推理分析这些线索,找出太子犯罪的确凿证据。
场景描述
范闲到达被火烧过的镇子,开始寻找可能的线索。他知道凶手非常狡猾,留下的线索非常隐蔽。范闲决定利用贝叶斯推理来整理和分析这些线索,以找到关键证据。
数据收集与预处理
范闲在镇上收集了一系列线索,包括:
-
目击者的证词:一些幸存者描述了火灾发生的情况。
-
物理证据:镇上残留的烧焦物、脚印等。
-
时间线索:火灾发生的具体时间。
范闲将这些线索整理成一个大表格,每一行代表一个线索。
使用贝叶斯推理分析线索
贝叶斯推理是一种统计方法,通过已知的证据来更新对某个事件的概率估计。范闲可以利用贝叶斯推理来分析所有线索,找出最可能的证据。
确定线索的似然概率和总体概率
数据来源
为了确定这些线索的似然概率,范闲参考类似情况下的历史数据。例如,在100起火灾案件中,如果80起案件中都发现了相关人员的存在,那么这个线索的似然概率就是0.8。具体步骤如下:
线索1:在镇上发现太子的手下的似然概率
假设在过去的100起类似案件中,90起案件中都有罪犯的手下出现在现场,那么线索1的似然概率 ( P(B1|A) ) 可以被估计为0.9。这表示如果太子确实是罪犯,那么镇上发现他的手下的可能性很高。
线索2:目击者看到可疑火光的似然概率
假设在过去的100起火灾案件中,70起案件中目击者报告看到可疑的火光,那么线索2的似然概率 ( P(B2|A) ) 可以被估计为0.7。如果太子是罪犯,那么目击者看到可疑火光的可能性也较高。
线索3:发现密信与太子府有关联的似然概率
假设在过去的100起类似案件中,80起案件中发现了类似的密信与罪犯来往,那么线索3的似然概率 ( P(B3|A) ) 可以被估计为0.8。如果太子是罪犯,那么发现密信的可能性也较高。
确定线索的总体概率
这些概率基于通常在事故现场找到这些线索的概率假设:
- 线索1的总体概率 ( P(B1) ) 是 0.2。通常在事故现场发现相关人员的概率。
- 线索2的总体概率 ( P(B2) ) 是 0.3。通常在事故现场目击者看到可疑火光的概率。
- 线索3的总体概率 ( P(B3) ) 是 0.1。通常在事故现场发现密信的概率。
贝叶斯推理计算
# 先验概率:太子和二皇子有罪的初始概率
P_A = 0.5
P_B = 0.5
# 线索的似然概率
P_B1_given_A = 0.9 # 线索1:太子的手下在场
P_B2_given_A = 0.7 # 线索2:目击者看到火光
P_B3_given_A = 0.8 # 线索3:发现密信
# 线索的总体概率
P_B1 = 0.2
P_B2 = 0.3
P_B3 = 0.1
# 使用贝叶斯定理更新后验概率
def bayesian_inference(P_prior, P_likelihood, P_evidence):
return (P_likelihood * P_prior) / P_evidence
# 计算每个线索对太子有罪的支持
P_A_given_B1 = bayesian_inference(P_A, P_B1_given_A, P_B1)
P_A_given_B2 = bayesian_inference(P_A, P_B2_given_A, P_B2)
P_A_given_B3 = bayesian_inference(P_A, P_B3_given_A, P_B3)
# 综合所有线索
P_A_combined = P_A_given_B1 * P_A_given_B2 * P_A_given_B3
P_A_final_normalized = P_A_combined / (P_A_combined + (1 - P_A_combined))
# 计算二皇子有罪的概率(假设没有发现线索)
P_B_given_B1 = bayesian_inference(P_B, 1 - P_B1_given_A, P_B1)
P_B_given_B2 = bayesian_inference(P_B, 1 - P_B2_given_A, P_B2)
P_B_given_B3 = bayesian_inference(P_B, 1 - P_B3_given_A, P_B3)
P_B_combined = P_B_given_B1 * P_B_given_B2 * P_B_given_B3
P_B_final_normalized = P_B_combined / (P_B_combined + (1 - P_B_combined))
print(f"综合所有线索后,太子有罪的概率: {P_A_final_normalized:.2f}")
print(f"综合所有线索后,二皇子有罪的概率: {P_B_final_normalized:.2f}")
场景细节
- 范闲到达镇上:范闲仔细查看火灾现场,收集所有可能的线索。
- 数据分析:范闲将线索整理成数据,使用贝叶斯推理进行分析。
- 证据确认:通过贝叶斯推理,范闲找到了支持太子有罪的关键证据,同时分析二皇子的无罪概率。
- 揭露真相:范闲将证据带回,揭露了太子的罪行,避免了一场冤案。
总结
通过这个具体场景,能更清晰的掌握贝叶斯概念和应用场景,关注作者,一起学习算法,穿越到古代也能用到哦。