【问题标题】:Adding methods to scipy.stats.rv_continuous, problems with rv_frozen向 scipy.stats.rv_continuous 添加方法,rv_frozen 的问题
【发布时间】:2021-09-30 20:10:30
【问题描述】:

我想为 scipy.stats.rv_continuous 中的所有分布添加一个方法。该方法将返回累积计数,即额外参数 nu(总计数)与现有 cdf 函数的乘积。我尝试将新方法添加到rv_continuous 类中,如下所示:

from scipy.stats import rv_continuous, uniform, gamma

def cntsCumul(self, x, nu): return nu * self.cdf(x)

rv_continuous.cntsCumul = cntsCumul

x = [-0.76, 1.2, 5.67]

for xx in x: print(uniform.cdf(xx)) # OK
for xx in x: print(uniform.cntsCumul(xx, 3)) # Not OK
    
rv1 = uniform()    
for xx in x: print(rv1.cdf(xx)) # OK
for xx in x: print(rv1.cntsCumul(xx, 3)) # Not OK
    
a = 2

for xx in x: print(gamma.cdf(xx, a)) # OK
for xx in x: print(gamma.cntsCumul(xx, a, 3)) # OK

rv2 = gamma(a)
for xx in x: print(rv2.cdf(xx)) # OK
for xx in x: print(rv2.cntsCumul(xx, 3)) # Not OK

但得到以下错误:

---> 14 for xx in x: print(rv1.cntsCumul(xx, 3)) # Not OK
     15 
     16 a = 2

AttributeError: 'rv_frozen' object has no attribute 'cntsCumul'

不知道如何处理rv_frozen。有什么建议?另外,不确定参数是否会导致问题。

【问题讨论】:

  • 只是 rv_continous 的子类,不要对其进行修补
  • @ev-br 如果我将 rv_continuous 子类化,更改将如何传播到从 rv_continuous 继承的所有发行版?
  • 坦率地说,你在这里做了一些非常奇怪的事情,试图修补所有 scipy.stats 发行版,包括各种子类。在原始帖子中错过了这一点 --- 我根本无法想象一个合法的用例
  • 我正在对各种分布进行似然拟合 - 我事先不知道正确的分布,并且该模型需要多个分布的组合。该方法需要累积计数。使用这种方法,事情会简单得多。此外,使用显示计数密度的方法绘制结果会简单得多。不确定python中的“奇怪”是什么意思:)

标签: python scipy scipy.stats


【解决方案1】:

您看到的直接问题是rv2.cntsCumul(xx, 3) 创建了一个所谓的冻结分布,它具有固定的形状和位置/比例 --- 这样,例如norm(loc=0, scale=2).pdf(x) 等价于norm.pdf(x, loc=0, scale=2) 等,源码见rv_continuous.__call__ 等。 现在,一个冻结的分布(一个rv_frozen 实例)创建了一个底层rv_continuous 子类的新实例(它被存储为一个rv_frozen 实例的self.dist 属性),并且那个不知道你的猴子- 打补丁。

另请注意,您所做的不考虑形状参数:例如gamma 的形状为a,因此签名为scipy.stats.gamma.pdf(x, a, loc, scale)。 loc 和 scale 有默认值,但 shape 没有。

在旁注中,就像我在 cmets 中所说的那样,您所做的是,委婉地说,有点不标准。 而且肯定非常容易出错。 如果您需要多个发行版,只需将它们的 _gen 类子类化,或者如果确实需要,只需对实例进行猴子补丁。

【讨论】:

  • 很公平。我要开始一个新线程来听听推荐的方法是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2017-02-15
  • 2016-04-05
相关资源
最近更新 更多