【问题标题】:How do you use scipy.stats.rv_continuous?你如何使用 scipy.stats.rv_continuous?
【发布时间】:2014-03-17 23:09:57
【问题描述】:

我一直在寻找一个很好的教程或如何使用rv_continuous 的示例,但我一直没有找到。

我读到了:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.html#scipy.stats.rv_continuous

但它并没有那么有用(而且它没有任何使用示例)。

我想要做的一个例子是,指定任何概率分布并能够调用fit,然后只需简单地拥有我想要的pdf并能够调用expect并得到期望的值。

到目前为止,我理解的是,要创建任何可能的分布,我们需要为它创建自己的类,然后子类rv_continuous。然后通过指定自定义_pdf_cdf,我们应该能够简单地使用rv_continuous 为我们提供的所有方法。 expectfit 之类的应该现在可用。

然而,对我来说真正神秘的是,如果我们不明确告诉 rv_continuous 指定概率分布的参数是什么,它真的能够正确地执行所有这些方法吗?仅使用 _pdf 或 _cdf 是如何做到的?

或者我只是误解了它的工作原理?

另外,如果你能提供一个简单的例子来说明它是如何工作的以及如何使用expect 和/或fit,那就太棒了!或者也许一个更好的教程或链接会很酷。

提前致谢。

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    这里有一个教程:http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html

    基本上,rv_continuous 用于子类化。如果您需要 scipy.stats 中未定义的发行版(其中有 70 多个),请使用它。

    了解它是如何工作的。简而言之,它使用通用代码路径:如果您的子类定义了 _pdf 而没有定义 _logpdf,那么它继承

    def _logpdf(self, x, *args):
        return log(self._pdf(x, *args))
    

    还有一堆类似的方法(详情请参阅https://github.com/scipy/scipy/blob/master/scipy/stats/_distn_infrastructure.py)。

    重新参数。您可能是指形状参数,对吗?它们是通过inspect@_pdf_cdf 的签名自动推断出来的,参见https://github.com/scipy/scipy/blob/master/scipy/stats/_distn_infrastructure.py#L617。 如果您想绕过检查,请将shapes 参数提供给您的实例的构造函数:

    class Mydist(stats.rv_continuous):
        def _pdf(self, x, a, b, c, d):
           return 42
    mydist = Mydist(shapes='a, b, c, d')
    

    【严格来说,这只适用于scipy 0.13及以上版本。早期版本使用不同的机制,需要shapes 属性。]

    【讨论】:

    • 因此,例如,如果我使用 KDE(核密度估计)拟合一些数据并且我想计算它的期望值或熵之类的东西,我是否只需创建一个 rv_continuous 类,将 my_kde_pdf 作为_pdf 然后只调用方法 expect 会产生相应的期望吗?
    • 原则上是的。假设您确实想要它,而不是仅仅为熵或您所追求的任何期望值DIY积分。
    • DIY?你这是什么意思?
    • 仅手动编码一个积分可能会或可能不会比子类化 rv_continuous 等更容易,这就是我的意思。
    • 是的,这就是我最后所做的。 rv_continuous 太烦人了。
    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2010-09-06
    • 2021-02-25
    • 2011-03-29
    • 2011-01-23
    • 2017-03-21
    • 2011-11-30
    • 2023-03-15
    相关资源
    最近更新 更多