为一组值拟合双峰分布
给定一个一维的数值数组,最简单的方法是什么来找出最适合这个数组的双峰分布?这里的每个“峰”都是一个正态分布。换句话说,怎么找到两个正态分布的组合,能最好地重现这个一维的数值数组呢?
具体来说,我想在Python中实现这个,但答案不一定要特定于某种编程语言。
谢谢!
2 个回答
0
我建议使用非常棒的 scipy 库。这个库提供了一些优化的方法。
不过,直接使用预定义的最小二乘法拟合或者类似的方法时,有一些很重要的注意事项。
你可能会遇到以下几个问题:
- 噪声比第二个峰值或两个峰值都要大。
- 部分峰值 - 你的数据在某个边界处被截断了。
- 采样 - 峰的宽度比你采样的数据要小。
- 数据不正常 - 你可能会得到一些结果……
- 重叠 - 如果峰值重叠,你会发现一个峰值可能拟合得很好,但第二个峰值会接近于零……
4
你想做的事情叫做高斯混合模型。解决这个问题的标准方法是使用期望最大化(Expectation Maximization)。在scipy这个库中,有一个关于机器学习和期望最大化的部分,叫做 scikits。我经常用这个。