如何解决Python 曲线拟合优化使用相对偏差而不是绝对偏差
我正在使用 scipy.optimize.curve_fit 拟合曲线。从我注意到的情况来看,曲线拟合是通过最小化 f(xdata,*popt) - ydata
的残差平方和来执行的,而我想最小化相对误差的平方残差:(f(xdata,*popt) - ydata)/ydata
因为我的 ydata
订单量级变化很大。如何使用相对偏差进行优化?我不一定需要使用 curve_fit
函数。任何实现此目的的python函数都可以。
PS:我知道另一种将 ydata
转换为对数空间并拟合结果数据的方法。但我不想采用这种方法。
解决方法
我想它与上一个问题scipy curve_fit coefficient does not align with expected value (physics relevant?)
有关导入一个由 log(ydata) 组成的新数字文件,而不是导入 ydata。
并用新函数 log(f(xdata)) 替换函数 f(xdata)。
这相当于将拟合标准从 LMSE 更改为 LMSRE。
,逆 y
数据的误差加权等效于转换到对数空间。这是出于以下原因:在标准最小二乘拟合中,数据 y
因错误 yt
而偏离“真实”函数值 sa
。最小二乘拟合最小化所有数据的 y - yt = sa
总和。当进入对数空间时,它使用对数的标准规则读取 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。