为了账号安全,请及时绑定邮箱和手机立即绑定

Python 中的二项式随机变量

Python 中的二项式随机变量

呼如林 2023-12-08 17:07:48
我试图仅使用一行代码来解决以下问题:“假设你参加了一个有 10 个问题的多项选择题测试,每个问题有 5 个答案选择(a、b、c、d、e),那么你仅通过猜测就正确答对 4 个问题的概率是多少?”我知道答案是 0.08808 或 9% 左右。我也尝试使用下面的行来反映这个答案import numpy as np#number of trials = 10#number of answers for each question = 5#probability of answering one correctly = 1/5 or 0.2# == 1 because 1/0 will indicate correct or incorrectsum(np.random.binomial(5, 0.2, 10) == 1)/10.0.2有人可以阐明如何获得 0.08808 而不是 0.2 吗?谢谢!
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

这是获取您寻求的概率的代码:


import math


def combinations_of_n_choose_m(n, m):

    return math.factorial(n)/math.factorial(n - m)/math.factorial(m)


def probability_of_correct_trials(trials, correct, prob):

    return combinations_of_n_choose_m(trials, correct) * prob**correct * (1-prob)**(trials-correct)


print(probability_of_correct_trials(10, 4, .2))

或者在一行中:


r = math.factorial(10)/math.factorial(10 - 4)/math.factorial(4) * prob**4 * (1-prob)**(10-4)

print(r)

结果:


0.08808038400000005


0.08828


查看完整回答
反对 回复 2023-12-08
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

近似该概率的蒙特卡罗方法是让 Python 生成大量考试(例如一百万个),其中每个考试有 n=10 个问题,猜出正确答案的机会为 p=1/5。然后你查看模拟考试结果,找出在模拟考试总数中恰好得到 4 个正确答案的分数。


import numpy.random as rnd 


n = 10; p = 1/5

numTrials = 10**6

numTimesFourCorrect = 0


for trial in range(numTrials):

    numAnswersCorrect = rnd.binomial(n, p)

    if numAnswersCorrect == 4:

        numTimesFourCorrect += 1


print(numTimesFourCorrect / numTrials)

一次运行在我的机器上给出了 0.088242(每次都不同),非常接近您的期望。原始代码的主要问题是,它np.random.binomial(n, p, numTrials)会给你的numTrials结果是 0 到 n 之间的数字;所以类似于np.mean(rnd.binomial(n, p, numTrials) == 4)矢量化的方法来做到这一点。


查看完整回答
反对 回复 2023-12-08
?
噜噜哒

TA贡献1784条经验 获得超7个赞

我想补充一点,可以通过sympy如下方式获得精确的解析解:


from sympy import stats, Eq

import fractions


# 10 questions with probability of success given by 1/5

X = stats.Binomial('X', 10, fractions.Fraction(1, 5))

P = stats.Probability(Eq(X, 4)).evaluate_integral()

# 172032/1953125 (exact answer)

approx = 172032/1953125

# 0.088080384


查看完整回答
反对 回复 2023-12-08
  • 3 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信