【发布时间】:2017-07-03 20:24:14
【问题描述】:
我尝试使用通过 scipy.stats 给出的 pdf 定义自定义分布
import numpy as np
from scipy.stats import rv_continuous
class CustomDistribution(rv_continuous):
def __init__(self, pdf=None):
super(CustomDistribution, self).__init__()
self.custom_pdf = pdf
print "Initialized!"
def _pdf(self, x, *args):
if self.custom_pdf is None:
# print 'PDF is not overridden'
return super(CustomDistribution, self)._pdf(x, *args)
else:
# print 'PDF is overridden'
return self.custom_pdf(x)
def g(x, mu):
if x < 0:
return 0
else:
return mu * np.exp(- mu * x)
my_exp_dist = CustomDistribution(pdf=lambda x: g(x, .5))
print my_exp_dist.mean()
如你所见,我尝试定义指数分布 wuth 参数 mu=0.5,但输出如下。
已初始化!
D:\Anaconda2\lib\site-packages\scipy\integrate\quadpack.py:357:
IntegrationWarning:算法不收敛。舍入误差 在外推表中检测到。假设 无法达到要求的容差,并且返回的结果 (如果 full_output = 1) 是可以得到的最好的。
warnings.warn(msg, IntegrationWarning)D:\Anaconda2\lib\site-packages\scipy\integrate\quadpack.py:357:
IntegrationWarning:已达到最大细分数 (50) 达到了。
2.0576933609
如果增加限制没有改善,建议 分析被积函数以确定困难。如果 可以确定局部难度的位置(奇点, 不连续性)一个人可能会从分裂中获益 间隔并在子范围上调用积分器。也许一个 应使用专用积分器。警告.警告(味精, 集成警告)
我应该怎么做才能改善这一点?
注意:计算精度问题在this GitHub issue中讨论。
【问题讨论】:
标签: python scipy statistics