获取 scipy.stats 分布的参数名称
Getting the parameter names of scipy.stats distributions
我正在编写一个脚本,以使用 scipy.stats 在数据集上找到最合适的分布。
我首先有一个分发名称列表,我对其进行迭代:
dists = ['alpha', 'anglit', 'arcsine', 'beta', 'betaprime', 'bradford', 'norm']
for d in dists:
dist = getattr(scipy.stats, d)
ps = dist.fit(selected_data)
errors.loc[d,['D-Value','P-Value']] = kstest(selected.tolist(), d, args=ps)
errors.loc[d,'Params'] = ps
现在,在这个循环之后,我 select 最小 D 值以获得最佳拟合分布。现在,每个分布 returns ps 中的一组特定参数,每个参数都有它们的名称等等(例如,对于 'alpha' 它将是 alpha,而对于 'norm'他们会是卑鄙和标准的)。
有没有办法获取scipy.stats中估计参数的名称?
提前致谢
此代码演示了 ev-br 在他的回答中提供的信息,以防其他人登陆此处。
>>> from scipy import stats
>>> dists = ['alpha', 'anglit', 'arcsine', 'beta', 'betaprime', 'bradford', 'norm']
>>> for d in dists:
... dist = getattr(scipy.stats, d)
... dist.name, dist.shapes
...
('alpha', 'a')
('anglit', None)
('arcsine', None)
('beta', 'a, b')
('betaprime', 'a, b')
('bradford', 'c')
('norm', None)
我要指出的是,shapes 参数为分布(例如按位置和比例参数化的法线)生成值 None。
Warren Weckesser 和我开发了一个更强大的解决方案:
import sys
import scipy.stats
def list_parameters(distribution):
"""List parameters for scipy.stats.distribution.
# Arguments
distribution: a string or scipy.stats distribution object.
# Returns
A list of distribution parameter strings.
"""
if isinstance(distribution, str):
distribution = getattr(scipy.stats, distribution)
if distribution.shapes:
parameters = [name.strip() for name in distribution.shapes.split(',')]
else:
parameters = []
if distribution.name in scipy.stats._discrete_distns._distn_names:
parameters += ['loc']
elif distribution.name in scipy.stats._continuous_distns._distn_names:
parameters += ['loc', 'scale']
else:
sys.exit("Distribution name not found in discrete or continuous lists.")
return parameters
讨论可见here。
我正在编写一个脚本,以使用 scipy.stats 在数据集上找到最合适的分布。 我首先有一个分发名称列表,我对其进行迭代:
dists = ['alpha', 'anglit', 'arcsine', 'beta', 'betaprime', 'bradford', 'norm']
for d in dists:
dist = getattr(scipy.stats, d)
ps = dist.fit(selected_data)
errors.loc[d,['D-Value','P-Value']] = kstest(selected.tolist(), d, args=ps)
errors.loc[d,'Params'] = ps
现在,在这个循环之后,我 select 最小 D 值以获得最佳拟合分布。现在,每个分布 returns ps 中的一组特定参数,每个参数都有它们的名称等等(例如,对于 'alpha' 它将是 alpha,而对于 'norm'他们会是卑鄙和标准的)。
有没有办法获取scipy.stats中估计参数的名称?
提前致谢
此代码演示了 ev-br 在他的回答中提供的信息,以防其他人登陆此处。
>>> from scipy import stats
>>> dists = ['alpha', 'anglit', 'arcsine', 'beta', 'betaprime', 'bradford', 'norm']
>>> for d in dists:
... dist = getattr(scipy.stats, d)
... dist.name, dist.shapes
...
('alpha', 'a')
('anglit', None)
('arcsine', None)
('beta', 'a, b')
('betaprime', 'a, b')
('bradford', 'c')
('norm', None)
我要指出的是,shapes 参数为分布(例如按位置和比例参数化的法线)生成值 None。
Warren Weckesser 和我开发了一个更强大的解决方案:
import sys
import scipy.stats
def list_parameters(distribution):
"""List parameters for scipy.stats.distribution.
# Arguments
distribution: a string or scipy.stats distribution object.
# Returns
A list of distribution parameter strings.
"""
if isinstance(distribution, str):
distribution = getattr(scipy.stats, distribution)
if distribution.shapes:
parameters = [name.strip() for name in distribution.shapes.split(',')]
else:
parameters = []
if distribution.name in scipy.stats._discrete_distns._distn_names:
parameters += ['loc']
elif distribution.name in scipy.stats._continuous_distns._distn_names:
parameters += ['loc', 'scale']
else:
sys.exit("Distribution name not found in discrete or continuous lists.")
return parameters
讨论可见here。