numpy 如何将离散分布(玻尔兹曼)拟合到大型数据集?

dzjeubhm  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(232)

我有一个NumPy数组,其中包含大量数据点= 53046323。数据表示持续时间并遵循离散分布,经过搜索,我相信它可以拟合Boltzmann。我做了几次试验来估计拟合数据的最佳分布参数,最佳参数是lambda=1

sa1=np.load('all_4_daily_consec_count_baseline_list.npy',allow_pickle=True)
nn=sa1.tolist()
data=np.concatenate(nn)
plt.hist(data, bins=int(np.max(data)), density=True, alpha=0.5)
plt.plot(data, boltzmann.pmf(data,1,53046322), 'go', markersize=9)

字符串
但并不适合图(test_boltzmann_full)test_boltzmann_full中的所有值
因此,我试图拟合部分数据,如图(test2)所示,它具有相同的分布形状和数据点数量585

sa1=np.load('all_4_daily_consec_count_baseline_list.npy',allow_pickle=True)
xx=np.reshape(sa1,(607,484))
noov_h=xx[306,250]
noov_hh=noov_h.astype('float')
data=noov_hh[~np.isnan(noov_hh)]
plt.hist(data, bins=int(np.max(data)), density=True, alpha=0.5)
plt.plot(data, boltzmann.pmf(data,1,584), 'go', markersize=9)


test2
我可以知道如何获得最佳拟合参数来拟合我的数据吗?在这两种情况下?是否有一种自适应的方法来获得更好的拟合?
数据在链接中,因为它很大,需要在这里上传data

pgccezyw

pgccezyw1#

scipy.stats.fit可用于将分布参数拟合到数据。下面是将玻尔兹曼分布的参数拟合到从玻尔兹曼分布采样的数据的示例。

import numpy as np
from scipy import stats
rng = np.random.default_rng()

# generate data distributed according to a Boltzmann distribution
dist = stats.boltzmann
shapes = (1.4, 19)
data = dist.rvs(*shapes, size=1000, random_state=rng)

# fit parameters of the distribution to date
bounds = dict(lambda_=(0.1, 10), N=(1, 100))  # bounds on parameter values
res = stats.fit(dist, data, bounds=bounds)

$ compare histogram against fitted PDF
res.plot()

字符串


的数据

相关问题