一次性对 scipy 的“curve_fit”进行多次迭代

汤姆乔

考虑以下 MWE

import numpy as np
from scipy.optimize import curve_fit
X=np.arange(1,10,1)
Y=abs(X+np.random.randn(15,9))

def linear(x, a, b):
    return (x/b)**a

coeffs=[]
for ix in range(Y.shape[0]):
    print(ix)
    c0, pcov = curve_fit(linear, X, Y[ix])
    coeffs.append(c0)


XX=np.tile(X, Y.shape[0])
c0, pcov = curve_fit(linear, XX, Y.flatten())

我有一个问题,我必须基本上这样做,但不是 15 次迭代,而是数千次,而且速度很慢。

有没有办法一次完成所有这些迭代curve_fit我知道函数的结果应该是一个一维数组,所以只需像这样传递参数

c0, pcov = curve_fit(nlinear, X, Y)

不会工作。另外我认为答案必须是 flattening Y,所以我可以得到一个 flattened 结果,但我无法得到任何工作。

编辑

我知道如果我做类似的事情

XX=np.tile(X, Y.shape[0])
c0, pcov = curve_fit(nlinear, XX, Y.flatten())

然后我得到系数的“平均”值,但这不是我想要的。

编辑 2

作为记录,我使用 Jacques Kvam 的设置解决了问题,但使用 Numpy 实现了(由于限制)

lX = np.log(X)
lY = np.log(Y)
A = np.vstack([lX, np.ones(len(lX))]).T
m, c=np.linalg.lstsq(A, lY.T)[0]

然后ma和得到b

b=np.exp(-c/m)
雅克·克瓦姆

最小二乘法不会给出相同的结果,因为在这种情况下噪声是由 log 转换的。如果噪声为零,则两种方法都会给出相同的结果。

import numpy as np
from numpy import random as rng
from scipy.optimize import curve_fit
rng.seed(0)
X=np.arange(1,7)
Y = np.zeros((4, 6))
for i in range(4):
    b = a = i + 1
    Y[i] = (X/b)**a + 0.01 * randn(6)

def linear(x, a, b):
    return (x/b)**a

coeffs=[]
for ix in range(Y.shape[0]):
    print(ix)
    c0, pcov = curve_fit(linear, X, Y[ix])
    coeffs.append(c0)

coefs

[array([ 0.99309127,  0.98742861]),
 array([ 2.00197613,  2.00082722]),
 array([ 2.99130237,  2.99390585]),
 array([ 3.99644048,  3.9992937 ])]

我将使用 scikit-learn 的线性回归实现,因为我相信它可以很好地扩展。

from sklearn.linear_model import LinearRegression
lr = LinearRegression()

获取X和的日志Y

lX = np.log(X)[None, :]
lY = np.log(Y)

现在拟合并检查系数是否与以前相同。

lr.fit(lX.T, lY.T)
lr.coef_

这给出了类似的指数。

array([ 0.98613517,  1.98643974,  2.96602892,  4.01718514])

现在检查除数。

np.exp(-lr.intercept_ / lr.coef_.ravel())

这给出了相似的系数,你可以看到这些方法在他们的答案中有所不同。

array([ 0.99199406,  1.98234916,  2.90677142,  3.73416501])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对scipy curve_fit进行猜测

来自分类Dev

对scipy curve_fit进行猜测

来自分类Dev

使用Scipy Curve_Fit进行预测/推断

来自分类Dev

来自scipy的curve_fit进行曲线拟合

来自分类Dev

带有ReactiveCocoa的MVVM,ViewModel如何告诉View进行一次一次性操作?

来自分类Dev

使用Django和Twilio通过SMS进行一次性用户身份验证

来自分类Dev

选择TSDB进行一次性智能家居安装

来自分类Dev

一次性对内存副本进行基准测试

来自分类Dev

在groovy中一次性进行空值和空值检查

来自分类Dev

在groovy中一次性进行空值和空值检查

来自分类Dev

如何一次性通过DF中的Pandas行进行多列转换

来自分类Dev

如何在 CQRS 系统中正确进行一次性查询?

来自分类Dev

Python Scipy优化curve_fit

来自分类Dev

Scipy curve_fit返回负方差

来自分类Dev

scipy的curve_fit函数的尺寸问题

来自分类Dev

使用scipy curve_fit拟合错误

来自分类Dev

scipy curve_fit错误:除以零

来自分类Dev

ets是否提供一种一次性进行更新和读取的方法-例如增量操作?

来自分类Dev

Scipy.Optimize-在Python的最后一次迭代中进行多处理和恢复

来自分类Dev

scipy curve_fit在简单的线性拟合中失败了吗?

来自分类Dev

Scipy Curve_Fit返回值说明

来自分类Dev

将scipy curve_fit用于可变数量的参数

来自分类Dev

我对Scipy curve_fit的使用似乎效果不佳

来自分类Dev

Scipy curve_fit似乎没有更改初始参数

来自分类Dev

如何使用scipy的curve_fit规范线性回归?

来自分类Dev

使用来自scipy python的curve_fit函数

来自分类Dev

Scipy curve_fit给出错误的答案

来自分类Dev

Scipy curve_fit不适合简单的指数

来自分类Dev

Scipy的curve_fit没有给出合理的结果

Related 相关文章

热门标签

归档