least_squares报错:ValueError: Method ‘lm‘ doesn‘t work when the number of residuals is less than the n

项目场景:

在处理多个计算值与对应的多个已知值之间的差值最小时,我们可以对这些值进行统一处理,进行相减取绝对值后进行求和,最终的差之和就是我们想要优化的目标,使用最小二乘法便可求出最终的解。

∑ i = 1 n ∣ d ( x , M i ) − d i ′ ∣ \sum_{i = 1}^{n}|d(x, M_i)-d_i'| i=1nd(x,Mi)di

其中 d(x, M_i) 表示计算值, x 是要求解的值, n n n 是数据量, d i ′ d_i' di 多个已知值。此数据由n组数据之间的差值得到

scipy.optimize.least_squaresSciPy库是用于解决非线性最小二乘问题的函数,调用此函数后便可计算出最优点。


问题描述

在按照以上步骤,利用scipy.optimize中的least_squares求解目标函数的最小值时,当优化方法使用lm时,发生报错:

ValueError: Method 'lm' doesn't work when the number of residuals is less than the number of variables.


原因分析:

在使用lm优化方法时,若残差的数量少于变量的数量,则会报这个错。此时是一个残差,两个变量。

lm方法基于最小二乘法的原理,需要通过最小化残差的平方和来优化变量。如果残差数量过少,那么就无法有效地确定变量的最优值,因为没有足够的信息来拟合或优化。此时可以将初始函数拆分成单独的残差公式,返回多个残差,以满足算法要求。


解决方案:

修改原函数的实现,确保它正确地计算并返回了与问题规模相匹配的残差数量。此时可以尝试设置多个残差函数计算方法,返回多个残差以满足要求。lm的计算方法是通过最小化残差的平方和来优化变量,因此可以通过多个残差的计算方法,进行约束变量。

例如:

 from scipy.optimize import least_squares
 import numpy as np 
 
 def fun(x):
     
     residual1 = some_calculation1(x)
     residual2 = some_calculation2(x)
     return np.array([residual1, residual2])
     
 x0 = some_initial_guess
 result = least_squares(fun, x0, method='lm')
 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Limiiiing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值