我正在试验高斯分布及其可能性。 为了找出最大似然,我将 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()
我希望 estimated_mu 和 estimated_sigma 应该近似等于 mu 和 sigma ,但这不是案件。而不是0和2我得到0.083和0.069。我明白什么地方不对吗?
答案 0 :(得分:1)
mlab.normpdf是pdf,它返回x的概率。由于均值为0,因此您将看到0周围的点具有很高的概率。 y_values_1是概率密度。
s = np.random.normal(0, 2, 1000)
上面的代码采样了1000个点,这些点的均值为0和std 2正态分布
np.mean(s) == 0.018308805079364696 and np.std(s) == 1.9467605916031896