如何使用GaussianMixture将多个高斯曲线拟合到python中的直方图?

时间:2019-05-14 09:46:32

标签: python numpy histogram curve gmm

我在numpy数组中有距离。我根据数据创建了直方图,并且必须使用GMM拟合高斯曲线。我真的不知道如何使用该模块以及如何拟合曲线。

我将数据存储在一个npy文件中,但是在此示例中,我写了一些值。

import numpy as np
import collections
from matplotlib import pyplot as plt
from scipy.stats import norm
import scipy.stats as ss
from sklearn.mixture import GaussianMixture

numpy_array = [[2130., 3090., 3350., 3110., 3300., 2970., 2450., 3170., 2190., 2960., 3040., 2800., 3210., 3400., 3010., 3510., 3900., 3290., 3340., 2200., 2480., 2550., 2940., 13550., 2810., 12660., 12260., 3550., 12850., 3000., 3520., 3810., 3460., 3450., 3350., 3330., 3550., 3290., 3330., 3010., 3480., 3040., 3460., 3000., 3100., 3700., 2590., 3700., 2930., 2760., 3020., 3450., 3000., 2750., 3640., 3240., 2760., 3070., 3340., 2850., 3340., 2740., 3170., 3060., 2970., 3370., 3140., 2620., 3900., 2750., 2680., 3190., 3400., 3420., 3350., 2900., 3420., 2450., 13680., 3540., 3550., 4250., 3580., 3210., 13080., 2910., 4010., 4080., 3430., 4080., 3280., 3850., 4050., 3230., 4310., 3220., 3890., 2370., 2720., 2470. ]]

m_s10 = np.full((1,100),0)

for i in range(100):
    m_s10[0][i] = numpy_array[i][0]

f, ax = plt.subplots(1)
ax.hist(m_s10[0], bins=55, alpha=0.5, histtype='stepfilled', facecolor="green")
ax.set_xlabel("time, t.u.")
ax.set_ylabel("#")
ax.xaxis.label.set_size(16)
ax.yaxis.label.set_size(16)
plt.title("S10-S9")
plt.show()

使用此代码,我得到了这个https://fettech.hu/graph.png图表。我想用GMM拟合两个曲线峰高斯曲线。因此,如果我还有其他数据,那么彼此之间更靠近的位置我希望看到更多的峰值。

换句话说,我想看一个示例,如何使用GMM将高斯曲线拟合到该数据。

0 个答案:

没有答案