我嘗試定義與PDF定製分佈經由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參數畝= 0.5給定,但輸出如下。
初始化!
d:\ Anaconda2 \ LIB \站點包\ SciPy的\集成\ quadpack.py:357:
IntegrationWarning:該算法不收斂。在外插表中檢測到四捨五入錯誤 。假定 要求的公差不能達到,並且返回的結果 (如果full_output = 1)是最好的可以獲得的。
warnings.warn(MSG,IntegrationWarning)d:\ Anaconda2 \ lib中\站點包\ SciPy的\整合\ quadpack.py:357:
IntegrationWarning:細分的最大數目(50)具有取得了 。
2.0576933609
如果增加限制產量沒有改善,建議將 分析積,以確定的困難。如果 可以確定局部難度的位置(奇點, 不連續性),則可能通過拆分間隔並在子範圍上調用積分器來獲益。也許應該使用專用集成商 。 warnings.warn(msg, IntegrationWarning)
我應該怎麼做才能改善這一點?
NOTE:計算精度問題在this GitHub issue中討論。
但如何在實例構造函數中使用_custom_ pdf? –
你不應該那樣做,因爲當你定義_pdf或_cdf時,如果你沒有定義_rvs,軟件使用你提供的函數簽名來獲得其他信息,它需要定義諸如rvs之類的方法。您需要每個pdf/cdf的rv_continuous的一個子類(需要參數)。 –
這正是我所需要的 - 我想要軟件使用我自定義的pdf來自動計算其他方法。順便說一句,爲什麼我的代碼不正確地計算指數分佈的期望? –