如何从冷冻的辣味.stats 分布中获取参数参数?

Posted

技术标签:

【中文标题】如何从冷冻的辣味.stats 分布中获取参数参数?【英文标题】:How to get parameter arguments from a frozen spicy.stats distribution? 【发布时间】:2016-09-26 19:58:10 【问题描述】:

冻结分发

scipy.stats 中,您可以创建一个frozen distribution,允许为该实例永久设置分布的参数化(形状、位置和比例)。

例如,您可以使用 alocscale 参数创建一个 gamma 分布 (scipy.stats.gamma),然后冻结它们,这样它们就不必在每个需要分发的时间。

import scipy.stats as stats

# Parameters for this particular gamma distribution
a, loc, scale = 3.14, 5.0, 2.0

# Do something with the general distribution parameterized
print 'gamma stats:', stats.gamma(a, loc=loc, scale=scale).stats()

# Create frozen distribution
rv = stats.gamma(a, loc=loc, scale=scale)

# Do something with the specific, already parameterized, distribution
print 'rv stats   :', rv.stats()

gamma stats: (array(11.280000000000001), array(12.56))
rv stats   : (array(11.280000000000001), array(12.56))

可以访问rv参数吗?

由于此功能很可能不会传递参数,有没有办法在稍后仅从冻结分布 rv 中获取这些值?

【问题讨论】:

【参考方案1】:

访问rv冻结参数

是的,用于创建冻结分布的参数在分布实例中可用。它们存储在args & kwds attribute 中。这取决于分发的实例是使用位置参数还是关键字参数创建的。

import scipy.stats as stats

# Parameters for this particular alpha distribution
a, loc, scale = 3.14, 5.0, 2.0

# Create frozen distribution
rv1 = stats.gamma(a, loc, scale)
rv2 = stats.gamma(a, loc=loc, scale=scale)

# Do something with frozen parameters
print 'positional and keyword'
print 'frozen args : '.format(rv1.args)
print 'frozen kwds : '.format(rv1.kwds)
print
print 'positional only'
print 'frozen args : '.format(rv2.args)
print 'frozen kwds : '.format(rv2.kwds)

positional and keyword
frozen args : (3.14, 5.0, 2.0)
frozen kwds : 

positional only
frozen args : (3.14,)
frozen kwds : 'loc': 5.0, 'scale': 2.0

奖励:处理argskwds 的私有方法

有一个私有方法.dist._parse_args(),它处理参数传递的两种情况,并返回一致的结果。

# Get the original parameters regardless of argument type
shape1, loc1, scale1 = rv1.dist._parse_args(*rv1.args, **rv1.kwds)
shape2, loc2, scale2 = rv2.dist._parse_args(*rv2.args, **rv2.kwds)

print 'positional and keyword'
print 'frozen parameters: shape=, loc=, scale='.format(shape1, loc1, scale1)
print
print 'positional only'
print 'frozen parameters: shape=, loc=, scale='.format(shape2, loc2, scale2)

positional and keyword
frozen parameters: shape=(3.14,), loc=5.0, scale=2.0

positional only
frozen parameters: shape=(3.14,), loc=5.0, scale=2.0

警告

当然,使用私有方法通常是不好的做法,因为从技术上讲,内部 API 总是可以更改,但是,有时它们会提供不错的功能,would be easy to re-implement should things change 和 nothing is really private in Python :)。

【讨论】:

以上是关于如何从冷冻的辣味.stats 分布中获取参数参数?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 12c - 从视图中获取 IMPORT_TABLE_STATS

楼宇自控系统--冷冻站系统监控

估计python中分布参数的置信区间

使用 stats.exponweib.fit 在 python 中拟合 Weibull 分布

编写环境二python库scipy.stats各种分布函数生成以及随机数生成泊松分布正态分布等

关于使用scipy.stats.lognorm来模拟对数正态分布的误区