如何求自定义平方误差类函数的全局最小值并构造scipy优化函数
方法1:基于Scipy优化器的目标函数构造
你可以直接将两个输入列表转换为numpy数组,按如下方式编写目标函数:
import numpy as np from scipy.optimize import minimize # 替换为你的实际数据 d = np.array([0.0322, 0.245, 0.85]) d_prime = np.array([56, 200, 340]) def objective(s): # s是待求解的参数,直接按公式计算平方误差和返回即可 return np.sum((d - s * d_prime) ** 2) # 调用优化器求解,初值随便设个非0值即可,比如1 res = minimize(objective, x0=1.0) optimal_s = res.x[0] print(f"优化得到的最优s:{optimal_s}")
方法2:更优的精确解析解法(优先推荐)
你给出的损失函数属于无截距项的一元线性回归损失,不需要使用迭代式的数值优化器,可以直接推导得到闭式精确解,计算速度更快、结果无收敛误差:
对损失函数求导并令导数等于0,推导可得最优s的计算公式:s = sum(d_i * d'_i) / sum( (d'_i)^2 )
对应代码仅需一行:
optimal_s = np.sum(d * d_prime) / np.sum(d_prime ** 2)
内容的提问来源于stack exchange,提问作者Vdass
相关产品推荐
相关产品推荐

