gpt4 book ai didi

python - 如何设置目标参数来使用 scipy.optimize 解决多目标问题?

转载 作者:行者123 更新时间:2023-12-01 01:39:12 34 4
gpt4 key购买 nike

我花了几个小时试图弄清楚 scipy.optimize.minimize function.

我已经成功了:

def poly_fun(coeffs,a,x):
predicted=10**np.polynomial.polynomial.polyval(np.log10(a),coeffs)

slope,intercept,r_value,p_value,std_err=scipy.stats.linregress(x,predicted)

return slope #intercept,r_value,p_value,std_err

res=minimize(poly_fun,x0=original_polynomial,args=(a,x),method='Nelder-Mead')

我的 poly_fun 中还有一个绘图函数,可以直观地了解正在发生的情况。

基本上我想改进斜率和截距,而不是多项式的 r2 的自动值。这个多项式正在转换一些东西,然后与一组“已知”数据进行比较,看看估计有多好,循环并重复以期获得优化的多项式。

也许我缺少约束?我不知道如何使用它们。

在 matlab 中,函数如 fgoalattain可以在优化过程中获取目标和权重值。

我想得到我的斜率:1,r2:1和截距:0,或尽可能接近。但是,我无法确定要使用函数中的哪些选项,或者我是否使用了错误的方法或其他内容。我在文档中没有看到任何有关实现目标的内容。

代码基本上试图使 y =0 并将线性趋势压平至底部,相反,我想要 1:1

我尝试过 xtol、jac=True 和其他一些方法,返回斜率、截距、r2 但我似乎无法让它工作。

最佳答案

minimize 查找给定(标量)目标函数的最小值。它不处理多目标问题。它只能通过传入单个目标函数(如 (slope-1)**2 + (r_value-1)**2 +拦截**2)来用于多目标问题。

但是,在这种情况下,最好使用专门的最小化器 least_squares ,传入一个返回向量[slope-1, r_value-1, Intercept]的函数。如果您还想附加权重[w1, w2, w3],请返回

[w1, w2, w3] * [slope-1, r_value-1, intercept]

相反。因此,如果权重为 3, 4, 5,则为

def poly_fun(coeffs, a, x):
predicted = 10**np.polynomial.polynomial.polyval(np.log10(a), coeffs)
slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(x, predicted)
return np.array([3, 4, 5]) * np.array([slope-1, r_value-1, intercept])

res = least_squares(poly_fun, x0=original_polynomial, args=(a, x))

除了可以在 least_squares 中使用的简单平方和之外,还有其他 loss 函数:请参阅文档。

关于python - 如何设置目标参数来使用 scipy.optimize 解决多目标问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52068810/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com