UPD: ありがとう、それは動作します。
ヒストグラムを表す 1D ベクトルがあります。いくつかのガウス関数の合計のように見えます:
SO でサンプル コードを見つけましcurve_fit
たが、より多くのガウス タプル (mu、sigma) を受け取るように変更する方法がわかりません。「curve_fit」は 1 つの関数 (この場合は 1 つのガウス曲線) のみを最適化すると聞きました。
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
def estimate_sigma(hist):
bin_edges = np.arange(len(hist))
bin_centres = bin_edges + 0.5
# Define model function to be used to fit to the data above:
def gauss(x, *p):
A, mu, sigma = p
return A*numpy.exp(-(x-mu)**2/(2.*sigma**2))
# p0 is the initial guess for the fitting coefficients (A, mu and sigma above)
p0 = [1., 0., 1.]
coeff, var_matrix = curve_fit(gauss, bin_centres, hist, p0=p0)
# Get the fitted curve
hist_fit = gauss(bin_centres, *coeff)
plt.plot(bin_centres, hist, label='Test data')
plt.plot(bin_centres, hist_fit, label='Fitted data')
print 'Fitted mean = ', coeff[1]
coeff2 =coeff[2]
print 'Fitted standard deviation = ', coeff2
plt.show()
この関数は 1 つのガウス曲線を見つけますが、視覚的には 3 つまたは 4 つのガウス曲線があります。
1D vector
in formの gmm 表現を実現するために、いくつかの numpy/scipy 関数についてアドバイスをいただけ([m1, sigma1],[m2, sigma2],..,[mN,sigmaN])
ますか?