Python 拟合多峰分布

Python 拟合多峰分布,python,scipy,Python,Scipy,假设我们有两个正态分布的线性组合。我想人们会把这个结果称为一个错误 如您所见,我们有两个正态分布的线性组合,其参数分别为(mu1=0,s1=5)和(mu2=20,s2=10)。当然,我们通常事先不知道这些参数 我想知道如何估计或拟合这些参数(mus和sigmas)。我相信有一些方法可以做到这一点,但我还没有找到任何方法。您所描述的问题是一种特殊情况。为了能够估计这些参数,您需要一些样本。如果您没有样本,但得到了曲线,则可以基于曲线生成一些样本。然后可以使用来估计参数。Scikit learn有

假设我们有两个正态分布的线性组合。我想人们会把这个结果称为一个错误

如您所见,我们有两个正态分布的线性组合,其参数分别为
(mu1=0,s1=5)
(mu2=20,s2=10)
。当然,我们通常事先不知道这些参数


我想知道如何估计或拟合这些参数(mus和sigmas)。我相信有一些方法可以做到这一点,但我还没有找到任何方法。

您所描述的问题是一种特殊情况。为了能够估计这些参数,您需要一些样本。如果您没有样本,但得到了曲线,则可以基于曲线生成一些样本。然后可以使用来估计参数。Scikit learn有一种方法可以让您做到这一点:。您只需提供样本、组件数量(
n\u components
)以及协方差类型(在您的情况下为
full
),因为您对协方差矩阵没有事先假设。

您可能希望使用该算法

这是一种迭代方法,允许您拟合混合组分的模型。 scikit learn中有一个非常方便的实现:

我发现很难弄清楚该算法的数据结构,因此我为您设置了一个示例:

您希望符合哪些参数?数据以什么形式出现?(样本值、直方图等)您有一个样本x1、x2、x3等。。。。xn?啊!我知道我早该知道的!我在寻找最大似然法,但不知怎的,我没能找到!谢谢,这应该有用:)嘿:)我有一个跟进问题,我原来的一个。也许你也这么认为?你也有机会吗?这个问题是这个问题的后续问题。我没有考虑过“边境”案件。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

ls = np.linspace(0, 60, 1000)

distribution = norm.pdf(ls, 0, 5) + norm.pdf(ls, 20, 10)
distribution = (distribution * 1000).astype(int)
distribution = distribution/distribution.sum()

plt.plot(ls, distribution)