gpt4 book ai didi

python - python scipy/numpy 中的多项式 pmf

转载 作者:太空狗 更新时间:2023-10-29 17:33:12 24 4
gpt4 key购买 nike

scipy/numpy 中是否有用于获取多项式的 PMF 的内置函数?我不确定 binom 是否以正确的方式概括,例如

# Attempt to define multinomial with n = 10, p = [0.1, 0.1, 0.8]
rv = scipy.stats.binom(10, [0.1, 0.1, 0.8])
# Score the outcome 4, 4, 2
rv.pmf([4, 4, 2])

正确的做法是什么?谢谢。

最佳答案

据我所知,没有内置函数,二项式概率不能概括(您需要对一组不同的可能结果进行归一化,因为所有计数的总和必须为 n,不会被采用由独立二项式处理)。但是,自己实现起来相当简单,例如:

import math

class Multinomial(object):
def __init__(self, params):
self._params = params

def pmf(self, counts):
if not(len(counts)==len(self._params)):
raise ValueError("Dimensionality of count vector is incorrect")

prob = 1.
for i,c in enumerate(counts):
prob *= self._params[i]**counts[i]

return prob * math.exp(self._log_multinomial_coeff(counts))

def log_pmf(self,counts):
if not(len(counts)==len(self._params)):
raise ValueError("Dimensionality of count vector is incorrect")

prob = 0.
for i,c in enumerate(counts):
prob += counts[i]*math.log(self._params[i])

return prob + self._log_multinomial_coeff(counts)

def _log_multinomial_coeff(self, counts):
return self._log_factorial(sum(counts)) - sum(self._log_factorial(c)
for c in counts)

def _log_factorial(self, num):
if not round(num)==num and num > 0:
raise ValueError("Can only compute the factorial of positive ints")
return sum(math.log(n) for n in range(1,num+1))

m = Multinomial([0.1, 0.1, 0.8])
print m.pmf([4,4,2])

>>2.016e-05

我对多项式系数的实现有些天真,并且在对数空间中工作以防止溢出。还要注意 n 作为参数是多余的,因为它是由计数总和给出的(并且相同的参数集适用于任何 n)。此外,由于对于中等 n 或大维度这将很快下溢,因此您最好在对数空间中工作(这里也提供了 logPMF!)

关于python - python scipy/numpy 中的多项式 pmf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com