Python中多元正态分布的最大似然估计

时间:2017-03-19 16:57:05

标签: python scipy mle

我正在尝试使用MLE拟合多元正态分布的参数。

import numpy as np
from scipy.stats import norm
from scipy.optimize import minimize
from scipy.stats import multivariate_normal as mnorm

def estimation(obs,fun,init,method='Nelder-Mead'):
    mle = lambda param: -np.sum(fun(*[obs,param])) ## negate since we will minimize
    result = minimize(mle,init,method=method)
    return result.x

拟合单变量正态分布是正确的:

obs = np.random.normal(1,4,50000)
ini = [0,1]
print(estimation(obs,lambda ob,p:norm.logpdf(ob,p[0],p[1]),ini))

但遇到了多变量的一些问题(错误将数组赋值给变量):

obs_m = np.random.multivariate_normal([0,0],[[1,0],[0,100]],50000)
ini_m = [[0,0],[[1,0],[0,100]]]
print(estimation(obs_m,lambda ob,p:mnorm.logpdf(ob,p[0],p[1],ini_m))

似乎优化算法不适用于任意数组/矩阵。我必须将平均数组和协方差矩阵打包成一个平面阵列,以便最小化。

ini_m = [0,0,1,0,0,100]
print(estimation(obs_m,lambda ob,p:mnorm.logpdf(ob,[p[0],p[1]],[[p[2],p[3]],[p[4],p[5]]]),ini_m))

显然,当尺寸增加时,这将很快失控,或者在没有封闭形式解决方案的情况下,这将会更加复杂。这里最好做什么?谢谢。

0 个答案:

没有答案