Matlab 数据拟合高斯分布

Matlab 数据拟合高斯分布,matlab,normalization,curve-fitting,gaussian,Matlab,Normalization,Curve Fitting,Gaussian,我有一个向量y,包含1440个值(值在0-1之间),看起来像高斯分布。 因此,我想找到最适合高斯分布的模型 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(

我有一个向量
y
,包含1440个值(值在0-1之间),看起来像高斯分布。 因此,我想找到最适合高斯分布的模型

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
可以下载

假设您正在使用此功能,如果您检查功能的头部:

% 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
是一个小错误

你的
y
sum(y)
470.1964
,这与
1
相去甚远。对数据进行规格化,使之和在拟合前等于1

编辑

事实上,如果数据不正常(或多或少,它接受0.5-1.5范围内的数据),则函数会正常化。而且效果非常好。由于函数内部对
y
进行了规范化,如果要将结果
norm
y
进行比较,需要对
y
进行规范化或反规范化
norm

 % normalize y
 plot(x,norm,x,y./sum(y))
 % denormalize norm
 plot(x,norm*sum(y),x,y)
在任何一种情况下(但规模不同):


gaussfit(x,y)将标准化的高斯拟合到数据中。如果数据未规范化,则无法正常工作。如何正确安装的问题得到了回答

您好,谢谢您的回答,但是函数gaussfit已经规范化了数据,如果它们不是。。。我的问题是估计的pdf值比经验值小得多…@gabboshow我从函数中复制了文本。这意味着函数不会规范化数据。否则文本就不会在那里了。再读一遍我的答案,规范化
y
应该很简单。请注意,如果您处理的是统计数据,
y
必须标准化,否则它在概念上是错误的。请参见函数gaussfitOK的第56行,因此,如果是这种情况,我将像以前一样对范数进行缩放,使其概率介于0和1之间。谢谢。@gabboshow不要将标准值缩放为
[01]
范围。由于
gaussfit
不要求
y
正好有一个pdf(它可以在0.5到1.5之间),如果您按我所示的比例缩放它,将其乘以
sum(y)
,效果会更好。在您发布的示例中,它并不重要,但对于
y
的其他值来说,它将很重要。