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
的其他值来说,它将很重要。