我正在尝试使用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)我的数学技能严重缺乏。也就是说,我很乐意接受一个答案,阐明这本笔记本与我的具体问题有什么关系!
答案 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分布的参数进行简单的评估,采样和最大似然估计。
初始化参数,使每个混合成分的均值和同一性协方差为零。