小编Voj*_*a F的帖子

在 SciPy 中拟合分布时如何检查收敛性

在 SciPy 中拟合分布时有没有办法检查收敛性?

我的目标是将 SciPy 分布(即 Johnson S_U 发行版)拟合到数十个数据集,作为自动数据监控系统的一部分。大多数情况下它工作正常,但一些数据集异常并且显然不遵循 Johnson S_U 分布。适合这些数据集静默地发散,即没有任何警告/错误/无论如何!相反,如果我切换到 R 并尝试在那里拟合,我永远不会得到收敛,这是正确的 - 无论拟合设置如何,R 算法都拒绝声明收敛。

数据:Dropbox 中有两个数据集:

  • data-converging-fit.csv...拟合很好地收敛的标准数据(您可能认为这是一个丑陋、倾斜且中心质量重的斑点,但 Johnson S_U 足够灵活以适应这样的野兽!):

在此处输入图片说明

  • data-diverging-fit.csv ...拟合发散的异常数据:

在此处输入图片说明

代码拟合分布:

import pandas as pd
from scipy import stats

distribution_name = 'johnsonsu'
dist = getattr(stats, distribution_name)

convdata = pd.read_csv('data-converging-fit.csv', index_col= 'timestamp')
divdata  = pd.read_csv('data-diverging-fit.csv', index_col= 'timestamp')
Run Code Online (Sandbox Code Playgroud)

在好的数据上,拟合参数具有共同的数量级:

a, b, loc, scale = dist.fit(convdata['target'])
a, b, loc, scale

[out]: (0.3154946859186918, 
 2.9938226613743932,
 0.002176043693009398,
 0.045430055488776266)
Run Code Online (Sandbox Code Playgroud)

在异常数据上,拟合参数不合理:

a, b, loc, scale = …
Run Code Online (Sandbox Code Playgroud)

python distribution scipy model-fitting convergence

6
推荐指数
1
解决办法
96
查看次数

标签 统计

convergence ×1

distribution ×1

model-fitting ×1

python ×1

scipy ×1