如何设置目标参数来解决 scipy.optimize 的多目标问题?
How to set goal parameters to solve a multiobjective problem with scipy.optimize?
我花了几个小时试图了解 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
这样的函数可以在优化过程中取目标和权重值。
我想得到我的 slope:1、r2:1 和 intercept:0,或者尽可能接近。
但是,我无法弄清楚要使用函数中的哪些选项,或者我是否使用了错误的方法或其他东西。我在文档中没有看到任何关于目标实现的信息。
代码试图使 y = 0 基本上并将线性趋势压平到底部,相反,我想要一个 1:1
我已经尝试过 xtol、jac=True 和其他一些方法,返回斜率、截距、r2,但我似乎无法让它工作。
minimize
寻找给定(标量)objective 函数的最小值。它不处理 multiobjective 问题。它可以用于多 objective 问题,只需传入单个 objective 函数,如 (slope-1)**2 + (r_value-1)**2 + intercept**2
。
但是,在这种情况下,最好使用专门的最小化器 least_squares
,传入一个 return 向量 [slope-1, r_value-1, intercept]
的函数。如果你还想附加权重 [w1, w2, w3]
, return
[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
函数:请参阅文档。
我花了几个小时试图了解 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
这样的函数可以在优化过程中取目标和权重值。
我想得到我的 slope:1、r2:1 和 intercept:0,或者尽可能接近。 但是,我无法弄清楚要使用函数中的哪些选项,或者我是否使用了错误的方法或其他东西。我在文档中没有看到任何关于目标实现的信息。
代码试图使 y = 0 基本上并将线性趋势压平到底部,相反,我想要一个 1:1
我已经尝试过 xtol、jac=True 和其他一些方法,返回斜率、截距、r2,但我似乎无法让它工作。
minimize
寻找给定(标量)objective 函数的最小值。它不处理 multiobjective 问题。它可以用于多 objective 问题,只需传入单个 objective 函数,如 (slope-1)**2 + (r_value-1)**2 + intercept**2
。
但是,在这种情况下,最好使用专门的最小化器 least_squares
,传入一个 return 向量 [slope-1, r_value-1, intercept]
的函数。如果你还想附加权重 [w1, w2, w3]
, return
[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
函数:请参阅文档。