将高斯分布拟合到数据

3
我有一个包含1440个值(值在0-1之间)的向量y,看起来像高斯分布。因此,我想找到最适合的高斯分布以得到一个模型。
x=1:1440;
[sigma_,mu_] = gaussfit(x,y);
norm = normpdf(x,mu_,sigma_);

我的问题是,norm 中的值比 y 中的值要小得多,即 norm 中的值的数量级为 10-3,而 y 中的值在 0 到 1 之间。因此,我需要添加一个额外的步骤来将 norm 中的值归一化到 0 到 1 的范围内。
norm_data = (norm - min(norm)) / ( max(norm) - min(norm) );

我的步骤正确吗?(估计sigma和mu,normpdf,归一化)是否有一种方法可以直接获得原始数据的拟合表达概率?

y可以在此处下载。

2个回答

1
假设您正在使用此gaussfit,如果您检查函数的头部:
% REMARKS:
% The function does not always converge in which case try to use initial
% values sigma0, mu0. Check also if the data is properly scaled, i.e. p.d.f
% should approx. sum up to 1

这意味着在拟合之前,您需要确保 sum(y)==1+err 中的 err 是一个小数。您的 y 具有 470.1964sum(y),与 1 相差甚远。在拟合之前对数据进行归一化,使总和为一。

编辑:

实际上,如果数据不是归一化的(它接受范围为 0.5-1.5 的数据),该函数会进行归一化。而且完全正常。由于函数内部对 y 进行了归一化,如果要将结果 normy 进行比较,则需要对 y 进行归一化或对 norm 进行反归一化。

 % normalize y
 plot(x,norm,x,y./sum(y))
 % denormalize norm
 plot(x,norm*sum(y),x,y)

在任何情况下(但尺度不同):

enter image description here


请查看高斯拟合函数的第56行。 - gabboshow
好的,如果是这种情况,我会像以前一样缩放范数,以获得介于0和1之间的概率。谢谢。 - gabboshow
我的原始数据是一个概率分布[0 1]。拟合后的数据(高斯分布)也需要是一个概率分布...我不能有大于1的值。 - gabboshow
请问您能否解释一下,在哪种情况下我会在这样做时遇到问题? - gabboshow
将任何 y 的总和在 [0.5 1.5] 之间的数据返回,无论 y 的最大值是多少。另外,使用 norm_data=norm*sum(y) 操作比你目前使用的方式更简洁、更优雅!@gabboshow - Ander Biguri
显示剩余3条评论

0

gaussfit(x,y) 函数用于对数据进行归一化高斯拟合。如果您的数据没有被归一化,这个函数将无法正常工作。如何正确地进行拟合,请参考这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接