Scipy多项式概率质量函数几乎总是0.0

fd3cxomn  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(48)

为了计算分类特征的概率,我被告知使用Multinoulli分布,这是多项分布的特殊情况,其中试验次数为1。
我得到了10个不同类别的概率:

p = [0.14285714 0.11428571 0.14285714 0.08571429 0.11428571 0.05714286 0.14285714 0.02857143 0.11428571 0.05714286]

字符串
并被告知使用以下输入[0,1,2,3,4,5,6,7,8,9]计算pmf。
然而,当我使用SciPy的多项分布的pmf时,我总是得到0.0的结果。我注意到,唯一一次我得到的不是0.0的数字是,如果n恰好是我在x中的结果值的总和。当我检查文档时,* 巧合的是 * 在所有示例中,n确实是值的总和。
我想我在这里根本上误解了一些东西。当参数n显然只有一个合理的值时,它有什么意义?为什么它会是我的类别值的总和?多项分布呈现给我的方式,我认为这些只是名称,标签,如第0类,第1类等。对我来说,把它们加起来没有意义。


的数据

gblwokeq

gblwokeq1#

当我查看文档时,* 巧合的是 * 在所有的例子中,n确实是值的总和。
这不是巧合。
我想我在这里误解了一些东西,当参数n显然只有一个合理的值时,有一个参数n有什么意义?
试验次数n可以是任何非负值,观测向量的和也可以是任何值,但只有当观测向量的和等于n时,才能得到非平凡的PMF(我将在最后说明这个参数的意义)。
当我看到多项分布时,我以为这些只是名字,标签,比如第0类,第1类,等等。
这是正确的;它们只是类别。
把它们总结起来对我来说毫无意义。
分类本身并不加总;观察到分类的试验次数加总。
我想我能理解其中的困惑,我假设这不是对概率分布本身的误解,只是SciPy需要参数n
更具体地说,让我们举个例子。当你要求x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]的概率质量- 0个类别0的观察值,1个类别1的观察值,等等. -你似乎想让多项式分布假设试验次数n = 45。它 * 没有 * 做这个假设;你必须显式地传递n。如果你传递n=100,它准备回答关于当你执行100次试验时所涉及的概率的问题。观察[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]的概率质量是零,因为在100次试验中只进行45次观察是不可能的。

from scipy import stats
p = [0.14285714, 0.11428571, 0.14285714, 0.08571429, 0.11428571, 0.05714286, 0.14285714, 0.02857143, 0.11428571, 0.05714286]
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
rv = stats.multinomial(n = 100, p=p)
rv.pmf(x)  # 0.0

字符串
如果你通过了n=45,你就会得到你想要的结果。

rv = stats.multinomial(n=sum(x), p=p)
rv.pmf(x)  # 2.485730789414698e-16


它被参数化的原因是因为它是一个基础设施的一部分,它不仅仅是评估PMF。例如,如果你想使用rvs方法绘制随机变量,你可以理解为什么你需要传入试验次数n-它需要知道要绘制多少个总观测值。

y = rv.rvs()
np.sum(y)  # 45


此外,将n视为多项分布的参数是标准的。参见Wikipedia's article on the multinomial distribution,例如- n 被列为参数。
x1c 0d1x的数据
k是从数组p的长度推断出来的。
如果这是有意义的,请提交一个documentation issue文件,让我们知道我们可能在文档中包括了什么,以使这一点更加明显。

相关问题