gpt4 book ai didi

python - 估计 Von Mises 分布的参数 Scipy - 不一致的答案

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:12 24 4
gpt4 key购买 nike

我正在手动计算 Von Mises 分布的参数,并想与 Scipy Von Mises 拟合函数进行比较。

我从拟合函数中得到不一致的结果。

我的两个数据集是 d1 = [0.8pi,0.9pi] 和 d2 = [0.2pi,0.1pi]

我的 python 函数如下:

def calc(data):
'''Takes a 1-D dataset and uses the scipy von mises to learn parameters and also calculates them by hand
using the regular M.L estimation for mean and the bannerjee et al (2005) approximation for concentraion factor
params: 1-D dataset in radians
'''
res = vonmises.fit(data, fscale=1)
mu = np.arctan(sum(np.sin(data))/sum(np.cos(data)))
A = sum(np.cos(data))*(1/len(data))*np.cos(mu)+sum(np.sin(data))*np.sin(mu)*(1/len(data))
k = A*(2-A**2)/(1-A**2)
print('mu and k by hand: ', mu, k)
print('mu and k from fit function', res[1],res[0])

我的结果如下:

输出:

>d1:
mu and k by hand: 0.471238898038 41.3480495503
mu and k from fit function 0.471238858132 40.8666881759

>d2:
mu and k by hand: -0.471238898038 -41.3480495503
mu and k from fit function 2.67035368203 40.8666556123

如您所见,d2 的 mu 不同。 k 有不同的符号。然而,d1 非常相似。

我不确定为什么会出现这种差异。我想知道我的手工估计是否有问题。我正在使用 Bishop 的模式识别教科书第 109 页中的 M.L.E 估计。任何见解都值得赞赏。

最佳答案

问题出在mu的计算上:

mu = np.arctan(sum(np.sin(data))/sum(np.cos(data)))

arctan 只会让你的角度介于 -pi/2 和 +pi/2 之间。它不知道自己在圆的哪个象限。考虑一下:arctan(1/1)arctan(-1/-1) 相同。两者都会产生 45 度的角度,但后者可能应该是 135 度。

有一个不同的函数,arctan2,它知道两个符号,因为它有两个参数。这应该会给你预期的结果:

mu = np.arctan2(sum(np.sin(data)), sum(np.cos(data)))

一般来说,当你需要做 arctan(y/x) 时,你通常需要 arctan2(y, x) 除非你事先知道角度的范围期待。

关于python - 估计 Von Mises 分布的参数 Scipy - 不一致的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47746500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com