标签: model-fitting

正确使用fmin_l_bfgs_b来拟合模型参数

我有一些实验数据(对于y,x,t_exp,m_exp),并且想要使用受约束的多变量BFGS方法找到该数据的"最优"模型参数(A,B,C,D,E).参数E必须大于0,其他参数不受约束.

def func(x, A, B, C, D, E, *args):
    return A * (x ** E) * numpy.cos(t_exp) * (1 - numpy.exp((-2 * B * x) / numpy.cos(t_exp))) +  numpy.exp((-2 * B * x) / numpy.cos(t_exp)) * C + (D * m_exp)

initial_values = numpy.array([-10, 2, -20, 0.3, 0.25])
mybounds = [(None,None), (None,None), (None,None), (None,None), (0, None)]
x,f,d = scipy.optimize.fmin_l_bfgs_b(func, x0=initial_values, args=(m_exp, t_exp), bounds=mybounds)
Run Code Online (Sandbox Code Playgroud)

几个问题:

  1. 我的模型公式是否应该func包含我的自变量,x还是应该从实验数据x_exp中提供*args
  2. 当我运行上面的代码时,我得到一个错误func() takes at least …

python numpy scipy model-fitting

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

找到两个向量之间的最佳/比例/转换

我有两个向量表示函数f(x),另一个向量f(a x + b),即f(x)的缩放和移位版本.我想找到最佳的比例和换档因素.

*最好 - 通过最小二乘误差,最大似然等.

有任何想法吗?

例如:

f1 = [0;0.450541598502498;0.0838213779969326;0.228976968716819;0.91333736150167;0.152378018969223;0.825816977489547;0.538342435260057;0.996134716626885;0.0781755287531837;0.442678269775446;0];
f2 = [-0.029171964726699;-0.0278570165494982;0.0331454732535324;0.187656956432487;0.358856370923984;0.449974662483267;0.391341738643094;0.244800719791534;0.111797007617227;0.0721767235173722;0.0854437239807415;0.143888234591602;0.251750993723227;0.478953530572365;0.748209818420035;0.908044924557262;0.811960826711455;0.512568916956487;0.22669198638799;0.168136111568694;0.365578085161896;0.644996661336714;0.823562159983554;0.792812945867018;0.656803251999341;0.545799498053254;0.587013303815021;0.777464637372241;0.962722388208354;0.980537136457874;0.734416947254272;0.375435649393553;0.106489547770962;0.0892376361668696;0.242467741982851;0.40610516900965;0.427497319032133;0.301874099075184;0.128396341665384;0.00246347624097456;-0.0322120242872125]
Run Code Online (Sandbox Code Playgroud)

模拟示例:比例为2 + 7/5,移位42/55,重新采样双三次

*请注意f(x)可能是不可逆转的......

谢谢,

algorithm matlab signal-processing octave model-fitting

6
推荐指数
2
解决办法
1847
查看次数

使用Python和lmfit拟合复杂模型?

我想使用lmfit 将椭圆测量数据拟合到复杂模型中.两个测量参数,psidelta是复杂函数中的变量rho.

我可以尝试用共享参数picewise方法将问题分离到实部和虚部,但是有没有办法直接用复杂函数来做?仅适合函数的实部工作,但是当我定义复杂的残差函数时,我得到:

TypeError:没有为复数定义排序关系.

下面是我的实际功能拟合代码和我尝试解决复杂的拟合问题:

    from __future__ import division
    from __future__ import print_function
    import numpy as np
    from pylab import *
    from lmfit import minimize, Parameters, Parameter, report_errors


    #=================================================================
    #             MODEL

    def r01_p(eps2, th):
        c=cos(th)
        s=(sin(th))**2

        stev= sqrt(eps2) * c - sqrt(1-(s / eps2))
        imen= sqrt(eps2) * c + sqrt(1-(s / eps2))
        return stev/imen

    def r01_s(eps2, th):
        c=cos(th)
        s=(sin(th))**2

        stev= c - sqrt(eps2) * sqrt(1-(s/eps2))
        imen= c + …
Run Code Online (Sandbox Code Playgroud)

python scipy model-fitting data-fitting lmfit

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

Python幂律适合使用ODR的数据上限和非对称错误

我正在尝试使用python将一些数据拟合到幂律中.问题是我的一些点是上限,我不知道如何包含在拟合例程中.

在数据中,我把上限作为y中的误差等于1,其余的则小得多.您可以将此错误设置为0并更改uplims列表生成器,但随后拟合非常糟糕.

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.odr import *

# Initiate some data
x = [1.73e-04, 5.21e-04, 1.57e-03, 4.71e-03, 1.41e-02, 4.25e-02, 1.28e-01, 3.84e-01, 1.15e+00]
x_err = [1e-04, 1e-04, 1e-03, 1e-03, 1e-02, 1e-02, 1e-01, 1e-01, 1e-01]
y = [1.26e-05, 8.48e-07, 2.09e-08, 4.11e-09, 8.22e-10, 2.61e-10, 4.46e-11, 1.02e-11, 3.98e-12]
y_err = [1, 1, 2.06e-08, 2.5e-09, 5.21e-10, 1.38e-10, 3.21e-11, 1, 1]

# Define upper limits
uplims = np.ones(len(y_err),dtype='bool')
for i in range(len(y_err)):
    if y_err[i]<1:
        uplims[i]=0
    else:
        uplims[i]=1

# …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting power-law model-fitting data-fitting

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

如何在 Tensorflow 2 模型训练过程中捕获异常

我正在使用 Tensorflow 训练 Unet 模型。如果我传递给模型进行训练的任何图像存在问题,则会引发异常。有时,这种情况可能会在训练后一两个小时发生。将来是否有可能捕获任何此类异常,以便我的模型可以继续下一张图像并恢复训练?我尝试try/catch向下面所示的函数添加一个块process_path,但这没有效果......

def process_path(filePath):
    # catching exceptions here has no effect
    parts = tf.strings.split(filePath, '/')
    fileName = parts[-1]
    parts = tf.strings.split(fileName, '.')
    prefix = tf.convert_to_tensor(maskDir, dtype=tf.string)
    suffix = tf.convert_to_tensor("-mask.png", dtype=tf.string)
    maskFileName = tf.strings.join((parts[-2], suffix))
    maskPath = tf.strings.join((prefix, maskFileName), separator='/')

    # load the raw data from the file as a string
    img = tf.io.read_file(filePath)
    img = decode_img(img)
    mask = tf.io.read_file(maskPath)
    oneHot = decodeMask(mask)
    img.set_shape([256, 256, 3])
    oneHot.set_shape([256, 256, 10])
    return img, oneHot

trainSize = …
Run Code Online (Sandbox Code Playgroud)

model-fitting tensorflow tensorflow-datasets tensorflow2.0

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

在 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
查看次数

嵌套函数的 Gnuplot 拟合

f(x)gnuplot 中适合具有下一种形式的函数的正确方法是什么?

f(x) = A*exp(x - B*f(x))
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法将其与任何其他函数一样适合:

fit f(x) "data.txt" via A,B 
Run Code Online (Sandbox Code Playgroud)

输出只是一句话:“ stack overflow

我什至不知道如何寻找这个主题,因此任何帮助将不胜感激。

这种函数是如何调用的呢?嵌套?递归?隐式的?

谢谢

gnuplot model-fitting

5
推荐指数
2
解决办法
967
查看次数

在python中为一对发行版生成MLE

好的,所以我当前的曲线拟合代码有一个步骤,使用scipy.stats根据数据确定正确的分布,

distributions = [st.laplace, st.norm, st.expon, st.dweibull, st.invweibull, st.lognorm, st.uniform]
mles = []

for distribution in distributions:
    pars = distribution.fit(data)
    mle = distribution.nnlf(pars, data)
    mles.append(mle)

results = [(distribution.name, mle) for distribution, mle in zip(distributions, mles)]

for dist in sorted(zip(distributions, mles), key=lambda d: d[1]):
    print dist
best_fit = sorted(zip(distributions, mles), key=lambda d: d[1])[0]
print 'Best fit reached using {}, MLE value: {}'.format(best_fit[0].name, best_fit[1])          


print [mod[0].name for mod in sorted(zip(distributions, mles), key=lambda d: d[1])]
Run Code Online (Sandbox Code Playgroud)

数据是数值列表.到目前为止,这对于拟合单峰分布非常有效,在脚本中确认,该脚本随机生成随机分布的值并使用curve_fit重新确定参数.

拟合的正态分布

现在我想使代码能够处理双峰分布,如下例所示:

正态和指数分布相结合

是否有可能从scipy.stats获取一对模型的MLE,以确定特定的一对分布是否适合数据?,类似于

distributions = [st.laplace, st.norm, st.expon, …
Run Code Online (Sandbox Code Playgroud)

python statistics distribution scipy model-fitting

5
推荐指数
1
解决办法
663
查看次数

R 中 GAM 中参数项的 Concurvity 与 mgcv

我有一个 GAM 模型(如下),其中 SST_mean 和 NAO 是数值,周期和区域是分类因素。我使用 mgcv 中的 concurvity 函数检查了 concurvity。

m2 <- gam(Strandings ~ s(SST_mean) + s(NAO, bs="re") + Cycle + Region, 
      family=poisson, data=DAT_ST, method = "REML")
Run Code Online (Sandbox Code Playgroud)

下面的初始结果具有相当高的值,表明模型中存在曲线。

> concurvity(m2, full = TRUE)
                     para     s(SST_mean)  s(NAO)
          worst    0.8944583  0.7532177   0.7131497
          observed 0.8944583  0.5784295   0.7131497
          estimate 0.8944583  0.5309899   0.7131497
Run Code Online (Sandbox Code Playgroud)

我进行了成对比较,看起来曲线问题实际上是在参数项之间而不是在平滑项之间或在平滑项和参数项之间

 > concurvity(m2, full = FALSE)
 $worst
                para        s(SST_mean)    s(NAO)
 para        1.000000e+00   1.736827e-25   0.001064966
 s(SST_mean) 1.746022e-25   1.000000e+00   0.351366528
 s(NAO)      1.064966e-03   3.513665e-01   1.000000000
Run Code Online (Sandbox Code Playgroud)

是否有任何原因,这是否是我的模型的问题。或者因为参数是分类的,出于某种原因这是可以预料的吗?我读到的高于 0.8 的人表示应该解决的曲线问题,但我在文献中找不到任何特定的阈值。有没有人可以推荐的参考资料?

r model-fitting gam mgcv

5
推荐指数
0
解决办法
314
查看次数

内部错误:流在完成之前不会阻塞主机;已经处于错误状态

流在完成之前不会阻塞主机;已经处于错误状态如何使用tensorflow keras修复它

model.compile(
optimizer="adam",
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['acc'])    
model.fit(X_train_scaled, y_train, epochs=5)
Run Code Online (Sandbox Code Playgroud)

出现这个错误

在此输入图像描述

在此输入图像描述

python model-fitting keras tensorflow

5
推荐指数
1
解决办法
4994
查看次数