Python中的最大似然函数

3
我正在尝试编写Python代码,用于生成一个二维矩阵的似然值,该矩阵基于10个测量值的x̄和σ网格值。其中,x̄从0.5到1.5,步长为0.01;σ从0.01到0.3,步长为0.01。完成后,我想创建分布的等高线图。
我使用的似然函数是高斯似然函数。目前我已经编写了:
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需要一个二维数组,这就是我应该创建的,但我不太确定如何操作。任何帮助将不胜感激!
1个回答

2

您的目标函数gaussian_pmf是三维的,因此您将为每个mu绘制一个单独的等高线图,即一百个图(这真的是您想要的吗?)。以下是如何完成其中每一个:

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会一次性计算所有值,因为XY都是[101, 101](网格化的xsigma)。
结果图:

plot


你也可以看看这些有用的示例。 这里

我以前不知道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]。因此,我不能只将x值设置为从0.5到1.5的范围,其中包含100个不同的数据点。 - TheKingConnie
@TheKingConnie 没关系。你可以在x中设置任何范围,meshgrid会处理它。 - Maxim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接