Как подогнать несколько гауссовых кривых с помощью GaussianMixture к гистограмме в python? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть расстояния в массиве 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.

...