Python 曲线拟合优化使用相对偏差而不是绝对偏差
Python curve fit optimize using relative deviation instead of absolute deviation
我正在使用 scipy.optimize.curve_fit 拟合曲线。据我所知,曲线拟合是通过最小化 f(xdata, *popt) - ydata
的残差平方和来执行的,而我想最小化相对误差的残差平方和:(f(xdata, *popt) - ydata)/ydata
因为我的 ydata
订单幅度变化很大。如何使用相对偏差进行优化?我不需要一定使用 curve_fit
函数。实现此目的的任何 python 函数都可以。
PS:我知道另一种将 ydata
转换为日志空间并拟合结果数据的方法。但是我不想这样做。
我猜想和上一个问题有关
不导入 ydata,而是导入一个由 log(ydata) 组成的新数值文件。
并用新函数 log(f(xdata)) 替换函数 f(xdata)。
这相当于将拟合标准从LMSE更改为LMSRE。
使用反向 y
数据的误差加权等同于转换为 log-space。这是出于以下原因:在标准最小二乘拟合中,数据 y
偏离“真实”函数值 yt
,误差为 sa
。最小二乘拟合最小化所有数据的 y - yt = sa
之和。当转到 log-space 时,使用对数的标准规则读取 log(y) - log(yt) = log( yt + sa) - log( yt ) = log( 1 + sa / yt ) = log( y / yt )
。
因此,这给出了 JJacquelin 也指出的相对误差。
顺便说一句,最小二乘等于平方,当然这也是( log( y ) - log( yt ) )**2 = ( -log( y ) + log( yt ) )**2 = log( yt / y )**2
我正在使用 scipy.optimize.curve_fit 拟合曲线。据我所知,曲线拟合是通过最小化 f(xdata, *popt) - ydata
的残差平方和来执行的,而我想最小化相对误差的残差平方和:(f(xdata, *popt) - ydata)/ydata
因为我的 ydata
订单幅度变化很大。如何使用相对偏差进行优化?我不需要一定使用 curve_fit
函数。实现此目的的任何 python 函数都可以。
PS:我知道另一种将 ydata
转换为日志空间并拟合结果数据的方法。但是我不想这样做。
我猜想和上一个问题有关
不导入 ydata,而是导入一个由 log(ydata) 组成的新数值文件。
并用新函数 log(f(xdata)) 替换函数 f(xdata)。
这相当于将拟合标准从LMSE更改为LMSRE。
使用反向 y
数据的误差加权等同于转换为 log-space。这是出于以下原因:在标准最小二乘拟合中,数据 y
偏离“真实”函数值 yt
,误差为 sa
。最小二乘拟合最小化所有数据的 y - yt = sa
之和。当转到 log-space 时,使用对数的标准规则读取 log(y) - log(yt) = log( yt + sa) - log( yt ) = log( 1 + sa / yt ) = log( y / yt )
。
因此,这给出了 JJacquelin 也指出的相对误差。
顺便说一句,最小二乘等于平方,当然这也是( log( y ) - log( yt ) )**2 = ( -log( y ) + log( yt ) )**2 = log( yt / y )**2