我有一个包含1440值(值在0-1之间)的向量y
,它看起来像高斯分布。因此,我想找到一个最适合高斯分布的模型。
x=1:1440;
[sigma_,mu_] = gaussfit(x,y);
norm = normpdf(x,mu_,sigma_);
我的问题是,范数中的值比y
中的值小得多,也就是说,norm
中的值是10-3
的顺序,而y中的值是在0 1
之间。
然后我必须添加一个额外的步骤,以便在0和1之间对范数的值进行归一化。
norm_data = (norm - min(norm)) / ( max(norm) - min(norm) );
我的程序正确吗?( sigma和µ的估计,normpdf,归一化)是否有一种方法可以直接拟合到表示概率的原始数据?
可以从here下载y
发布于 2015-07-21 17:58:31
假设您正在使用此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
是错误的小东西。
您的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)
在任何一种情况下(但规模不同):
发布于 2015-07-21 19:23:52
gaussfit(x,y)对数据进行归一化高斯拟合。如果你的数据没有被标准化,这是不能工作的。如何恰当地拟合它的问题已经回答了here!
https://stackoverflow.com/questions/31535729
复制相似问题