【发布时间】:2021-02-28 22:19:05
【问题描述】:
我需要帮助实现两个骰子的朴素贝叶斯方法 - 其中一个是具有六个面的“正常”骰子,因此每个面出现1/6 的概率相同。另一个是加载的骰子,每次尝试都会给出6 的结果。
我的程序应该输入骰子的选择,然后模拟十个掷骰的序列。
我必须从赔率1:1 开始,然后在每个结果之后应用朴素贝叶斯方法更新赔率,以决定选择哪个骰子(最有可能)。如果最有可能的骰子是加载的骰子,它应该返回True,否则返回False。
我的代码:
import numpy as np
p1 = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6] # normal
p2 = [1/10, 1/10, 1/10, 1/10, 1/10, 1/2] # loaded
def roll(loaded):
if loaded:
print("a loaded die")
p = p2
else:
print("a normal die")
p = p1
# roll the dice 10 times
sequence = np.random.choice(6, size=10, p=p) + 1
for roll in sequence:
print("rolled %d" % roll)
return sequence
def bayes(sequence):
odds = 1.0 # start with odds 1:1
for roll in sequence:
for i in range(len(p1)):
r = p1[i]/p2[i]
if r == 10/6:
odds = 1.0*(10/6)**roll
elif r == 1/3:
odds = 1.0*(1/3)**roll
if odds > 1:
return True
else:
return False
sequence = roll(True)
if bayes(sequence):
print("More likely loaded")
else:
print("More likely normal")
这个想法是为了区分加载骰子的概率为 0.1 和 0.5 的情况,但不幸的是代码不能正常工作。你能帮帮我吗?
【问题讨论】:
标签: python naivebayes