分析曲线拟合:一个高斯曲线拟合双峰模型

时间:2018-02-13 12:04:02

标签: r math optimization scipy curve-fitting

问题:

我有一个完全无噪声模型ytot,它是两条完美高斯曲线的总和:

> y0 = A0 * exp( (x-mu0)^2/(2*std0^2) ) 
> y1 = A1 * exp( (x-mu1)^2/(2*std1^2) ) 
> y = y0 + y1

我现在需要通过最小平方曲线拟合将它们拟合为 SINGLE 高斯曲线。

问题:

我知道真正的ytot(完全无噪音):是否有任何分析解决方案代表了这种情况下至少sqaures优化器的作用?例如。为这种情况分析解决雅可比矩阵或梯度?

更多信息:

最小sqaures曲线拟合可以例如完成在Python中使用scipy.optimize的curve_fit或最小化函数。但是,我必须为不同的参数执行数百万次这样的操作,这使我的代码成为瓶颈。

注意:我可以 NOT 使用此处的统计观点(例如mu = p * mu0 +(1-p)* mu1,依此类推)。如果mu0~mu1和std0~std1,这两种方法都会产生非常相似的解,但随着双模的增加,系统地会有所不同。

1 个答案:

答案 0 :(得分:0)

经过两天思考和线性代数后找到解决方案。我希望将来对其他人有用。

不是将高斯拟合到y,而是可以将抛物线拟合为log(y)。抛物线最小二乘问题可以通过线性代数轻松解决,参见例如在此google doc和此video

这很容易出现异翼,因此必须使用weighted least square model。我用了权重= y ^ 2.

当然,在弄清楚之后,我发现这个非常明确的paper概述了完全相同的方法。请参阅论文了解详细解决方案。