微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从抛硬币实验中生成数据

如何解决从抛硬币实验中生成数据

我有一枚硬币,硬币有记忆。即最后一次翻转会影响这次翻转的正面概率。如何编写代码以从此过程生成数据?具体来说,从这个过程中,我希望能够生成 n=1000 个数据点。

P(H | H_{-1}) != P(H | T_{-1}) #probability of heads given heads in last flip is not equal to probability of heads given tails in last flip
P(T | H_{-1}) != P(T | T_{-1}) #probability of tails given heads in last flip is not equal to probability of tails given tails in last flip

{-1} represents last flip

Assume P( H | H in last flip ) = 0.75
P( H | T in last flip ) = 0.30

另外,假设第一次抛硬币出现正面或反面的概率相等。

非常感谢任何帮助!!

解决方法

这是您可以用于实验的骨架。

import random

def flip(last_flip):
    if last_flip == "H":
        #INSERT LOGIC FOR PROBABILITY IF PREVIOUS FLIP WAS HEADS
        heads_probability = 0.75
    elif last_flip == "T":
        #INSERT LOGIC FOR PROBABILITY IF PREVIOUS FLIP WAS TAILS
        heads_probability = 0.30
    else:
        heads_probability = 0.5

    tails_probability = 1-heads_probability
    flip = random.choices(["H","T"],weights = (heads_probability,tails_probability))[0]

    return flip


flips = []
lastFlip = None
for n in range(1000):
    newFlip = flip(lastFlip)
    flips.append(newFlip)
    lastFlip = newFlip

这使用 random.choices 函数来选择概率不均匀的正面或反面。 flip 函数将前一次翻转作为输入并计算新的抛硬币概率。您需要使用您在实验中使用的逻辑(注释所在的位置)填写此部分。

代码的主要部分是抛硬币并将结果存储在一个数组中。对于下一次试验,它使用前一次翻转作为前面讨论的 flip 函数的输入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。