Python中的最大似然函数

Python中的最大似然函数,python,math,matplotlib,gaussian,bayesian,Python,Math,Matplotlib,Gaussian,Bayesian,我一直在尝试编写一个Python代码,用10个值作为一组度量值,为x̄和σ值的网格生成二维似然值矩阵。x̄以0.01的步长从0.5变为1.5,σ以0.01的步长从0.01变为0.3。之后,我想创建一个分布的等高线图 我用的似然函数是。到目前为止,我已经: List1 = open("DataSet1.dat").readlines() List2 = [float(i) for i in List1] x = List2[0:10] gaussian_pmf = lambda x, mu, s

我一直在尝试编写一个Python代码,用10个值作为一组度量值,为x̄和σ值的网格生成二维似然值矩阵。x̄以0.01的步长从0.5变为1.5,σ以0.01的步长从0.01变为0.3。之后,我想创建一个分布的等高线图

我用的似然函数是。到目前为止,我已经:

List1 = open("DataSet1.dat").readlines()
List2 = [float(i) for i in List1]
x = List2[0:10]

gaussian_pmf = lambda x, mu, sigma: (1 / (sigma*np.sqrt(2*np.pi)))*np.exp((-
(x-mu)**2)/(2*(sigma**2)))

mu = np.arange(0.5,1.51,0.01)
sigma = np.arange(0.01,1.02,0.01)

for i in range(0,len(mu)):
    distribution = []
    for i in range (0,len(x)):
        distribution.append(gaussian_pmf(x[i],mu,sigma))

plt.contour(distribution)
plt.show()

X是我需要的10个数据值的数组,但我不确定我在这里做错了什么。plt.contour需要一个2d数组,这是我应该创建的,但我不太确定如何创建。任何帮助都将不胜感激

您的目标函数是三维的,因此您将为每个
mu
有一个单独的等高线图,即100个图(这真的是您想要的吗?)。以下是您可以执行其中每一项操作的方法:

x = np.arange(0.5, 1.5, 0.01)
mu = np.arange(0.5, 1.51, 0.01)
sigma = np.arange(0.01, 1.02, 0.01)

# Create a meshgrid of (x, sigma)
X, Y = np.meshgrid(x, sigma)
Z = gaussian_pmf(X, mu[5], Y)

plt.contour(X, Y, Z)
plt.xlim([0.5, 0.7])
plt.ylim([0.0, 0.2])
plt.show()
请注意,
Z
一次计算所有值,因为
X
Y
都是
[101,101]
(网格化
X
sigma

结果图:



您可能还会看到。

我从来都不知道np.meshgrid,但问题是我将x作为10个值的数组,而不是100个值的范围。数据集中的前10个值是:[0.9825445798、1.029390653、0.8631417834、0.8775475793、0.8221602195、0.9815531839、1.021575305、1.006499418、1.030042624、0.8719514497]。所以我不能用100个不同的数据点将x值设置为0.5到1.5的范围。@KingConnie,这没关系。您可以在
x
中设置任何范围,
meshgrid
将处理该范围