【问题标题】:Four-parameter cumulative Weibull fit四参数累积 Weibull 拟合
【发布时间】:2015-02-25 08:27:37
【问题描述】:

我正在尝试找到最适合该类型的四参数累积 Weibull 拟合:

f(x) = A*(1-exp(-((x-xo)/W)^s)

在 scipy.optimize 中使用 curve_fit 如下:

import numpy as np
import pandas as pd
import matplotlib.pylab as plt
from scipy.optimize import curve_fit

def weib(x, *p):
    XSsat, Lo, W, s = p
    return XSsat*(1-np.exp(-((x-Lo)/W)**s))

x_data = [10.1, 11.7, 14.3, 20.2, 32.1, 37.1, 45.5, 64.2]
y_data = [2.96e-6, 2.58e-5, 1.72e-4, 1.18e-3, 2.27e-2, 3.26e-2, 3.98e-2,   4.67e-2]
p0 = [5e-2, 0, 35, 3]
coeff, pcov = curve_fit(weib, x_data, y_data, p0=p0)

但是,我得到的输出是:

print coeff
[ nan  nan  nan  nan]

这个问题似乎与没有为 x 定义函数有关

有什么想法吗?

【问题讨论】:

  • 对不起,我的意思是说“问题似乎与没有为 x
  • 在这里使用 numpy 1.9.0 和 scipy 0.14.0 产生好的值:pcoeff = [0.04575166 10.09999817 25.57229605 2.77544717]
  • 确实,我更新到 scipy 0.15.1 并且可以正常工作。非常感谢您的帮助!!

标签: python scipy weibull


【解决方案1】:

如果您不想实现自己的方法来适应参数,您可以使用现有的库。 SurPyval 让你可以相对轻松地做你想做的事(我是它的开发者)。

import surpyval as surv

x = [10.1, 11.7, 14.3, 20.2, 32.1, 37.1, 45.5, 64.2]
model = surv.ExpoWeibull.fit(x, offset=True, how="MPS")
model
Parametric SurPyval Model
=========================
Distribution        : ExpoWeibull
Fitted by           : MPS
Offset (gamma)      : 9.689564921508342
Parameters          :
     alpha: 67.02718103263011
      beta: 3.704898338328615
        mu: 0.11727921731925008

Exponentiated Weibull 的参数可以看here。输出可以映射到维基百科中的参数化,使得 k 是 beta,lambda 是 alpha,mu 是 alpha。 “gamma”参数只是 x -> x - gamma 的变换。

“offset”告诉它添加“gamma”参数。

此外,“MPS”是Maximum Product of Spacing 方法,在使用偏移分布时非常稳健。使用最大似然“MLE”实际上失败了。

【讨论】:

    猜你喜欢
    • 2019-09-06
    • 2012-08-02
    • 2021-02-25
    • 2013-02-24
    • 2016-07-21
    • 2013-09-21
    • 2014-06-23
    • 2017-11-02
    • 2015-07-04
    相关资源
    最近更新 更多