什么是scipy相当于matlab的`mle`函数?

时间:2014-10-20 16:58:09

标签: python matlab scipy mathematical-optimization

我正在尝试使用expectation maximization approach将某些数据拟合到混合模型中。在Matlab中,代码如下

% mixture model's PDF
mixtureModel = ...
    @(x,pguess,kappa) pguess/180 + (1-pguess)*exp(kappa*cos(2*x/180*pi))/(180*besseli(0,kappa));

% Set up parameters for the MLE function
options = statset('mlecustom');
options.MaxIter     = 20000;
options.MaxFunEvals = 20000;

% fit the model using maximum likelihood estimate
params = mle(data, 'pdf', mixtureModel, 'start', [.1 1/10], ...
            'lowerbound', [0 1/50], 'upperbound', [1 50], ...
            'options', options);

data参数是浮点数的一维向量。

我想知道如何在Python中实现等效计算。我调查了scipy.optimize.minimize,但这似乎不是Matlab的mle的替代品。

我有点失落和不知所措,有人能指出我正确的方向(理想情况下是一些示例代码吗?)

非常感谢!

编辑:与此同时我找到了this,但我仍然很失落,因为(1)这似乎主要集中在混合的高斯模型(我的不是) (2)我的数学技能严重缺乏。也就是说,我很乐意接受一个答案,阐明这本笔记本与我的具体问题有什么关系!

2 个答案:

答案 0 :(得分:1)

这是均匀和von mises分布的混合模型(非混合模型),其参数是您尝试使用直接最大似然估计推断的(不是EM,尽管这可能更合适)。如果您在互联网上搜索,您可以找到关于这个确切问题的论文。 SciPy没有像matlab的fmincon那样明确的选择,它在你的代码中使用它作为默认值,但你可以寻找允许参数界限的scipy优化方法。 scipy界面与matlab的界面不同,你需要传递数据中的数据。 scipy最小化函数的参数,而pguess和kappa参数需要由长度为2的参数数组表示。

答案 1 :(得分:0)

我相信scikit-learn工具包有你需要的东西:

http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GMM.html

  

高斯混合模型

     

高斯混合模型概率分布的表示。该类允许对GMM分布的参数进行简单的评估,采样和最大似然估计。

     

初始化参数,使每个混合成分的均值和同一性协方差为零。