2

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 vectorin formの gmm 表現を実現するために、いくつかの numpy/scipy 関数についてアドバイスをいただけ([m1, sigma1],[m2, sigma2],..,[mN,sigmaN])ますか?

4

1 に答える 1