我有一个一维数据集,在python中使用statsmodels和scipy计算了内核密度估计值。在
我想生成一组随机数,看看它们是否给出相同的分布。在
到目前为止,我能找到的解决方案是:
To draw a number x between 0 and 1 and return cdf^{-1}(x), where cdf^{-1} is the inverse cumulative distribution function of 'f'.
问题是,使用statsmodel,我可以找到逆的累积分布,但以矩阵的形式。所以把一个数x乘以矩阵,并不是从计算的KDE分布中得到一个随机样本。在
如何从给定的KDE函数或分布生成随机数?在
编辑: 下面是一个代码示例:
def calcKDE(data):
#Calculating KDE
kde = sm.nonparametric.KDEUnivariate(data)
kde.fit(kernel='gau', bw='silverman')
return kde
def generateData(data, kde):
inverse_cdf = kde.icdf // this is a method which takes no parameters, and so is kde.cdf
randomSet = np.random.random(1) * inverse_cdf // inverse_cdf is taken as a matrix, will also add a loop here to return 1000 random values
return randomSet
反变换采样方法如下所示:
我建议使用定制的示例函数来实现这个类,以便更好地使用。在
这种方法也是非常通用的,并且有很多更快的方法使用关于正在使用的内核的附加信息(没有反变换采样)。你应该在谷歌上找到一些例子。在
另一句话:
sample-function
我对kde工具的排序从最好到最差(我的观点):
相关问题 更多 >
编程相关推荐