问题:
我有一个完全无噪声模型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,这两种方法都会产生非常相似的解,但随着双模的增加,系统地会有所不同。
答案 0 :(得分:0)
经过两天思考和线性代数后找到解决方案。我希望将来对其他人有用。
不是将高斯拟合到y,而是可以将抛物线拟合为log(y)。抛物线最小二乘问题可以通过线性代数轻松解决,参见例如在此google doc和此video。
这很容易出现异翼,因此必须使用weighted least square model。我用了权重= y ^ 2.
当然,在弄清楚之后,我发现这个非常明确的paper概述了完全相同的方法。请参阅论文了解详细解决方案。