繁体   English   中英

Python统计

[英]Statistics in Python

我正在上一门机器学习课程,并且给了我们第一个统计数据-“编程”练习。

因此练习如下:

回顾一下讲座中的故事:“亚马逊上的两个卖家的价格相同。 其中有90条正面评论和10条负面评论。 另一个为2正,0为负。 写下可靠性的后验概率(如本课程所述)。 使用数值积分计算p(x> y | D1,D2)。 您可以使用函数scipy.stats.beta.rvs(a,b,size)来生成Beta分布式样本。

我们从演讲中了解到以下内容:

应用了两个Beta二项式模型:p(x | D1)= Beta(x | 91,11)和p(y | D2)= Beta(y | 3,1)

计算卖方1比卖方2更可靠的概率:

p(x > y | D1, D2 ) = ∫∫ [x > y] Beta (x| 91, 11) Beta (y| 3, 1) dx dy

所以我在Python中的尝试是这样的:

In [1]: import numpy as np
        from scipy import integrate, stats
In [2]: f = lambda x, y: stats.beta.rvs(91, 11, x) * stats.beta.rvs(3, 1, y)
In [3]: stats.probplot(result, x > y)

而且我收到一条错误消息,指出:

... The maximum number of subdivisions (50) has been achieved....

但最终对计算的答案约为 1.7。 (被告知答案约为0.7)

我的问题是:如何计算[x> y]部分,这意味着:卖方1(x)比卖方2(y)更可靠的概率?

几乎正确,我会做类似的事情:

from scipy import stats

N = 10000
P = sum(stats.beta.rvs(3, 1, size=N) < stats.beta.rvs(91, 11, size=N))
P / N

并且如果要图形显示:

import matplotlib.pyplot as plt
import numpy as np

X = np.linspace(0.6, 0.8, 501)
Y = stats.beta.pdf(X, 1 + P, 1 + N - P)

plt.plot(X, Y)

可能有一些库代码可以更好地进行绘图。

上面给出了答案的蒙特卡罗估计。 如果您想获得更好的数值估计,可以使用以下方法求积:

from scipy.integrate import dblquad
from scipy import stats

a = stats.beta(91, 11)
b = stats.beta(3, 1)

dblquad(
    lambda x, y: a.pdf(x) * b.pdf(y),
    0, 1, lambda x: x, lambda x: 1)

这给了我大约0.712592804的估算值(误差2e-8)。

如果您想获得更高的精度,则需要做一些分析:

https://stats.stackexchange.com/questions/7061/binomial-probability-question

这涉及到一些我无法企及的超验方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM