- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
对于我的学士论文,我正在研究一个项目,我想在其中对某些数据进行拟合。问题有点复杂,但我尽量减少这里的问题:
我们有三个数据点(可用的理论数据很少),但这些点高度相关。
使用 curve_fit 来拟合这些点,我们得到了一个糟糕的拟合结果,如您在这张图片中所见。 (可以通过手动更改拟合参数轻松改进拟合)。
我们的拟合结果与相关性(蓝色)和被忽略的相关性(橙色):
当我们使用更多参数时,结果会变得更好(因为届时拟合基本上表现得像求解一样)。
我的问题:为什么会发生这种行为? (我们使用我们自己的最小二乘算法来解决我们的特定问题,但它遇到了同样的问题)。这是一个数值问题,还是 curve_fit 显示此解决方案有任何充分的理由?
我很乐意有一个很好的解释来说明为什么我们不能使用“仅 2 个”参数来拟合这些高度相关的 3 个数据点。
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
plt.rcParams['lines.linewidth'] = 1
y = np.array([1.1994, 1.0941, 1.0047])
w = np.array([1, 1.08, 1.16])
cor = np.array([[1, 0.9674, 0.8812],[0.9674, 1, 0.9523], [0.8812, 0.9523, 1]])
s = np.array([0.0095, 0.0104, 0.0072])
def f(x, a, b):
return a + b*x
cov = np.zeros((3,3))
for i in range(3):
for j in range(3):
cov[i,j] = cor[i,j] * s[i] * s[j]
A1, B1 = curve_fit(f, w, y, sigma=cov)
A2, B2 = curve_fit(f, w, y)
plt.plot(w, f(w, *A1))
plt.plot(w, f(w, *A2))
plt.scatter(w, y)
plt.show()
最佳答案
这不是一个数字问题。 “问题”是协方差矩阵的非对角线项都是正的并且相对较大。这些决定了拟合误差之间的相关性,因此如果所有项都是正的,则表示所有误差都是正相关的。如果一个很大,其他的也往往会很大,而且符号相同。
这是一个类似于你的例子,带有协方差矩阵
[2.0 1.3 0.0]
sigma = [1.3 2.0 1.3]
[0.0 1.3 2.0]
(这个矩阵的条件数是 23.76,所以我们不应该期待任何数值问题。)
虽然第一个和第三个点之间的协方差为0,但是第一个和第二个之间,第二个和第三个之间是1.3,1.3是方差中比较大的一部分,都是2。所以它会如果拟合模型中的所有错误都具有相同的符号,这不足为奇。
此脚本对三个点进行拟合并绘制数据和拟合线。
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
def f(x, a, b):
return a + b*x
x = np.array([1, 2, 3])
y = np.array([2, 0.75, 0])
sig = np.array([[2.0, 1.3, 0.0],
[1.3, 2.0, 1.3],
[0.0, 1.3, 2.0]])
params, pcov = curve_fit(f, x, y, sigma=sig)
y_errors = f(x, *params) - y
plt.plot(x, y, 'ko', label="data")
plt.plot(x, f(x, *params), linewidth=2.5, label="fitted curve")
plt.vlines(x, y, f(x, *params), 'r')
for k in range(3):
plt.annotate(s=r"$e_{%d}$" % (k+1), xy=(x[k]-0.05, y[k]+0.5*y_errors[k]), ha='right')
plt.xlabel('x')
plt.ylabel('y')
plt.axis('equal')
plt.grid()
plt.legend(framealpha=1, shadow=True)
plt.show()
正如您在图中看到的,所有错误都具有相同的符号。
我们可以通过考虑另一个协方差矩阵来证实这个推理,
[ 2.0 1.3 -1.0]
sigma = [ 1.3 2.0 -1.3]
[-1.0 -1.3 2.0]
在这种情况下,所有非对角线项的量级都相对较大。第一个和第二个误差之间的协方差为正,第二个和第三个之间以及第一个和第三个之间的协方差为负。如果这些非对角项相对于方差足够大,我们应该期望前两点的误差符号相同,而第三个误差的符号与前两个相反。
这是当 sig
更改为上述矩阵时脚本生成的图:
错误显示了预期的模式。
关于python - curve_fit 拟合高度相关数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810437/
我正在尝试将数据放入 this file 中使用 Python 中 scipy 的 curve_fit。该文件包含以摄氏度和毫秒为单位的温度与时间的数据点。我将它们转换为开尔文和秒: thefile
我正在尝试将数据集拟合到这个庞大的方程中。我知道以前有人问过这个问题,但我不认为最初的猜测是我的问题,我也不能在拟合方程中添加更多项。 我的拟合方程。请注意,积分中的“u”与上面定义的 u 不同。 顺
我有一个包含多列的 pandas.DataFrame ,我想应用 curve_fit对他们每个人都有作用。我希望输出是一个数据框,其中具有适合列中数据的最佳值(目前,我对它们的协方差不感兴趣)。 df
我在这里定义了一个函数来返回任意数量的高斯分布的总和: import numpy from numpy import * import matplotlib.pyplot as plt from sc
我正在尝试将高斯拟合到光谱中,y 值大约为 10^(-19)。在我将整个数据乘以 10^(-19) 之前和之后,Curve_fit 给我的拟合结果都很差。附件是我的代码,它是一组相当简单的数据,只是值
我需要适应scipy.optimize.curve_fit一些看起来像图中点的数据。我使用函数 y(x) (见下面的 def)它给出了一个常量 y(x)=c对于 x p[0] '''
我是 Scipy.optimize curve_fit() 工具的新手。我试图找到一个最能模拟图中曲线(时间序列信号的一部分)的函数,但同时我只是将正弦曲线拟合到它并得到一条平坦的线。有人能发现我做错
the link of data from dropbox badfitting我尝试使用 curve_fit 来将数据与我在 python 中的预定义函数进行拟合,但结果远非完美。代码很简单,如下所
抱歉,我是 python 和堆栈流方面的新手。所以我无法发布图像。 我想用Python中的curve_fit函数进行幂律回归。但结果对我来说很奇怪。我用excel进一步检查了一下。看起来这两者差别很大
我正在尝试为拟合函数传递两个数组,该函数接受两个值。 数据文件: 第一栏:时间第 2 栏:温度第 3 栏:交易量第 4 栏:压力 0.000,0.946,4.668,0.981 0.050,0.946
对于我的学士论文,我正在研究一个项目,我想在其中对某些数据进行拟合。问题有点复杂,但我尽量减少这里的问题: 我们有三个数据点(可用的理论数据很少),但这些点高度相关。 使用 curve_fit 来拟合
Python 的 curve_fit计算具有单个自变量的函数的最佳拟合参数,但是有没有办法使用 curve_fit 或其他方法来拟合具有多个自变量的函数?例如: def func(x, y, a, b
本文实例讲述了Python图像处理之直线和曲线的拟合与绘制。分享给大家供大家参考,具体如下: 在数据处理和绘图中,我们通常会遇到直线或曲线的拟合问题,python中scipy模块的子模块optim
我正在尝试使用 curve_fit 来拟合一个简单的正弦波(甚至没有任何噪声)作为测试,然后再继续解决更复杂的问题。不幸的是,它甚至没有给出正确的答案。这是我的语法: x = linspace(0,1
我正在使用Scipy将数据适合一个函数。该函数为我提供了2个参数的值,在这种情况下, a 和 b 。我想使用绑定(bind)的参数来限制这些参数可以采用的值,每个参数都有自己的可接受值范围。 可接受的
我试图找到一条拟合我的数据的曲线,该曲线在视觉上似乎具有幂律分布。 我希望利用 scipy.optimize.curve_fit,但无论我尝试什么函数或数据规范化,我都会得到 RuntimeError
我尝试使用curve_fit拟合对数曲线,假设它遵循Y=a*ln(X)+b,但拟合的数据看起来仍然不正确. 现在我正在使用以下代码: from scipy.optimize import curve_
我正在尝试使用 scipy 的 curve_fit 拟合分布。我尝试拟合一个单分量指数函数,结果几乎是一条直线(见图)。我还尝试了两分量指数拟合,似乎效果很好。两个分量仅意味着方程的一部分使用不同的输
为了拟合双曲函数,我尝试使用以下代码: import numpy as np from scipy.optimize import curve_fit def hyperbola(x, s_1, s_
看起来它只适合第一个参数。 当我尝试使用 curve_fit 示例生成曲线时,这一切都很好,但当我使用自己的数据时却不然。 这是我的原始数据:https://pastebin.com/0hs2JVXL
我是一名优秀的程序员,十分优秀!