Python 估计的高斯分布参数是错误的

Python 估计的高斯分布参数是错误的,python,gaussian,log-likelihood,Python,Gaussian,Log Likelihood,我正在试验高斯分布及其可能性。 为了计算最大似然,我将似然与mu(期望值)和sigma(平均值)区分开来,两者分别等于data.mean()和data.std() import matplotlib.pyplot as plt import numpy as np import matplotlib.mlab as mlab import math from scipy.stats import norm def calculate_likelihood(x, mu, sigma):

我正在试验高斯分布及其可能性。 为了计算最大似然,我将似然与mu(期望值)和sigma(平均值)区分开来,两者分别等于data.mean()和data.std()

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
import math
from scipy.stats import norm

def calculate_likelihood(x, mu, sigma): 
    n = len(x)  
    likelihood = n/2.0 * np.log(2 * np.pi) + n/2.0 * math.log(sigma **2 ) + 1/(2*sigma**2) * sum([(x_i - mu)**2 for x_i in x ])

    return likelihood

def estimate_gaussian_parameters_from_data(data):
    return data.mean(), data.std()

def main():
    mu = 0
    sigma = 2
    x_values = np.linspace(mu - 3*sigma, mu + 3*sigma, 1000)
    y_values_1 = mlab.normpdf(x_values, mu, sigma)

    estimated_mu, estimated_sigma = estimate_gaussian_parameters_from_data(y_values_1)

if (__name__ == "__main__"):
    main()

我期望估计的μm和估计的μsigma应该近似等于μ和sigma,但事实并非如此。我得到的不是0和2,而是0.083和0.069。我理解错了吗?

mlab.normpdf是一个pdf,它返回x的概率。因为平均值是0,所以你会看到0附近的点概率很高。y_值_1是概率密度

s = np.random.normal(0, 2, 1000)
上述代码对1000个点进行采样,这些点正态分布,平均值为0,标准值为2

np.mean(s) == 0.018308805079364696 and np.std(s) == 1.9467605916031896

你已经说到点子上了,但请不要调用
y
概率值。它们是概率密度。