我有一个角分布,我想把von Mises分布的混合拟合到
我该怎么做?
我在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(因此需要instllr和相关的packge)。
最佳答案
我实现了一个算法来解决类似的问题,请参见
https://framagit.org/gozat/mixture-of-von-mises-distributions
详细情况。
从随机样本(1Dnumpy.array
)开始,应用expectation-maximization algorithm根据von Mises分布对数据进行分类。
该算法允许von Mises分布的任何叠加(尽管mathematics associated with the algorithm(链接到pdf)只描述了两个分布的叠加,但很容易推广),而且速度和我所能做的一样快。它只依赖于Numpy和iv
的scipy.special
函数来调用修改后的Bessel函数。
mixed_mises_pdfit返回每个分布的权重,以及$\mu$和$\kappa$参数,例如Wikipedia page on von Mises distribution。
最好添加代码的实际分类结果,以便对周期性数据进行分类。最后,扩展Scikit-learn也应该是可行的,尽管它需要更多的时间来实现。