Python中的最大似然函数
我一直在尝试编写一个Python代码,用10个值作为一组度量值,为x̄和σ值的网格生成二维似然值矩阵。x̄以0.01的步长从0.5变为1.5,σ以0.01的步长从0.01变为0.3。之后,我想创建一个分布的等高线图 我用的似然函数是。到目前为止,我已经: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
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
将处理该范围