Python:如何拟合von Mises分布的混合体?

时间:2016-07-20 01:19:00

标签: python scipy statistics

我有一个角度分布,我希望将von Mises分布混合到那个

enter image description here

我该怎么做?

我在R中找到了一个实现,Fit a mixture of von Mises distributions in R

我也发现可以在Python中使用单个von Mises分布,http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.vonmises.html

我想也许我可以尝试如何拟合混合分布,因为我已经在scipy中定义了函数?

最后,我使用rpy2解决了这个问题。具体来说,我使用Python清理数据,并使用R软件包来训练VMM(因此需要安装R和相关的软件包)。

1 个答案:

答案 0 :(得分:0)

我实现了解决类似问题的算法,请参见

https://framagit.org/gozat/mixture-of-von-mises-distributions

有关详细信息。

从随机样本(一维numpy.array)开始,它应用expectation-maximization algorithm来根据von-Mises分布对数据进行分类。

该算法允许von-Mises分布的任何叠加(尽管mathematics associated with the algorithm(链接到pdf)仅描述了两个分布的叠加,很容易泛化),它的速度与I能做。它仅依赖于Numpy和iv的{​​{1}}函数来调用修改后的Bessel函数。

mixed_mises_pdfit返回每个分布的权重以及$ \ mu $和$ \ kappa $参数,请参见例如Wikipedia page on von Mises distribution

最好添加代码的真实分类结果,以便对定期数据进行分类。最终,对Scikit-learn的扩展也应该可行,尽管它需要更多的时间来实施。