如何在Python中使用MLE估计高斯分布参数

如何在Python中使用MLE估计高斯分布参数,python,machine-learning,statistics,pattern-recognition,Python,Machine Learning,Statistics,Pattern Recognition,我得到了一组高斯分布的数据,下面是一个直方图,显示了它们的实际外观: 我必须使用贝叶斯分类器将这些数据分为两类,我正在使用sklearn进行分类,它工作正常。然而,作为工作的一部分,我必须使用最大似然估计来估计数据的分布参数(σ,μ),并在分类器中使用它们 那么,是否有任何python库或伪代码可以使用最大似然法估计高斯分布参数,以便我可以在分类器中使用估计值 我正在寻找类似于Matlab中的mle(数据,'distribute',dist) phat = mle(MPG,'distribut

我得到了一组高斯分布的数据,下面是一个直方图,显示了它们的实际外观:

我必须使用贝叶斯分类器将这些数据分为两类,我正在使用
sklearn
进行分类,它工作正常。然而,作为工作的一部分,我必须使用最大似然估计来估计数据的分布参数(σ,μ),并在分类器中使用它们

那么,是否有任何python库或伪代码可以使用最大似然法估计高斯分布参数,以便我可以在分类器中使用估计值

我正在寻找类似于Matlab中的
mle(数据,'distribute',dist)

phat = mle(MPG,'distribution','burr')
phat =
34.6447    3.7898    3.5722

因此,由于您的数据是多维的(D,在您的例子中,特别是D=15),您需要对数据的平均值(D维)和协方差(D^2维)进行建模

您可以使用numpy轻松地实现它,如下所示

import numpy as np

def gaussian_mle(data):                                                                                                                                                                               
    mu = data.mean(axis=0)                                                                                                                                                                            
    var = (data-mu).T @ (data-mu) / data.shape[0] #  this is slightly suboptimal, but instructive

    return mu, var                                                                                                                                                                                    
要查看它是否有效,让我们在一些人工数据上运行它:

mean = [1.0, 3.14]                                                                                                                                                                                    
cov = [[2.0, 0.5], [0.5, 10]]                                                                                                                                                                         
data = np.random.multivariate_normal(mean, cov, 10000)                                                                                                                                                

print(gaussian_mle(data))
这给了我们,在自定义格式化后(由于我们随机抽样,结果可能略有不同):


你坚持要打电话给图书馆吗?因为这将是一个微不足道的numpy 2-liner;-)@dedObed如果足够清楚,我很同意…好的,回答。只是为了确定。。。你只关心一维数据吗?@dedObed我忘了。。。我的数据实际上是具有降维(15)的图像。现在它变得更有趣:-)所以它是多维数据。。。你想用对角协方差的高斯模型还是完全协方差模型?
(
    array([1.00981014, 3.1217965 ]), #  sample mean
    array([[2.0266404 , 0.43036865], 
           [0.43036865, 9.87599803]]) #  sample covariance
)