我有一些实验数据(对于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)
几个问题:
func包含我的自变量,x还是应该从实验数据x_exp中提供*args?func() takes at least …我有两个向量表示函数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)

*请注意f(x)可能是不可逆转的......
谢谢,
辖
我想使用lmfit 将椭圆测量数据拟合到复杂模型中.两个测量参数,psi和delta是复杂函数中的变量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将一些数据拟合到幂律中.问题是我的一些点是上限,我不知道如何包含在拟合例程中.
在数据中,我把上限作为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) 我正在使用 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) 在 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) 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”
我什至不知道如何寻找这个主题,因此任何帮助将不胜感激。
这种函数是如何调用的呢?嵌套?递归?隐式的?
谢谢
好的,所以我当前的曲线拟合代码有一个步骤,使用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) 我有一个 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 的人表示应该解决的曲线问题,但我在文献中找不到任何特定的阈值。有没有人可以推荐的参考资料?
流在完成之前不会阻塞主机;已经处于错误状态如何使用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)
出现这个错误
model-fitting ×10
python ×6
scipy ×4
data-fitting ×2
distribution ×2
tensorflow ×2
algorithm ×1
convergence ×1
gam ×1
gnuplot ×1
keras ×1
lmfit ×1
matlab ×1
mgcv ×1
numpy ×1
octave ×1
power-law ×1
r ×1
statistics ×1