【问题标题】:fitting gaussian distribution to data将高斯分布拟合到数据
【发布时间】:2015-10-10 17:03:46
【问题描述】:

我有一个向量 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可以下载here

【问题讨论】:

    标签: matlab normalization curve-fitting gaussian


    【解决方案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 犯了一些小错误。

    您的y 有一个sum(y)470.1964,与1 相差甚远。规范化您的数据,使总和在拟合之前等于 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)
    

    在任何一种情况下(但规模不同):

    【讨论】:

    • 嗨,谢谢你的回答,但如果不是,函数 gaussfit 已经对数据进行了标准化......我的问题是估计的 pdf 的值远小于经验值......
    • @gabboshow 我从函数中复制了文本。这意味着函数 DOES NOT 对数据进行规范化。否则文本将不存在。再次阅读我的答案,规范化y 应该很简单。请注意,如果您正在处理统计数据,y 必须被规范化,否则它在概念上是错误的。
    • 请看函数gaussfit的第56行
    • 好的,所以如果是这种情况,我会像以前一样缩放规范,使概率介于 0 和 1 之间。谢谢。
    • @gabboshow 不要将标准缩放为[0 1] 范围。因为gaussfit 不需要y 正好有1 个pdf(它可以在0.5 到1.5 之间),如果你按照我展示的那样缩放它,然后乘以sum(y) 会更好。在您发布的示例中,这无关紧要,但对于 y 的其他值而言,这将很重要。
    【解决方案2】:

    gaussfit(x,y) 将归一化的高斯拟合到数据。如果您的数据未标准化,则无法正常工作。如何正确安装的问题已回答here

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 2023-03-19
      • 2015-01-29
      • 2016-11-10
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 2022-01-19
      • 2019-06-17
      相关资源
      最近更新 更多