我花了几个小时试图让我的头周围的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,但我似乎不能让它工作。
1条答案
按热度按时间mznpcxlj1#
minimize
查找给定(标量)目标函数的最小值。它不处理多目标问题。它可以用于多目标问题,只需传入一个单一的目标函数,如(slope-1)**2 + (r_value-1)**2 + intercept**2
。然而,在这种情况下,最好使用专门的最小化器
least_squares
,传入一个返回向量[slope-1, r_value-1, intercept]
的函数。如果您还想附加权重[w1, w2, w3]
,则返回因此,对于权重
3, 4, 5
,除了可以在
least_squares
中使用的普通平方和函数外,还有其他loss
函数:见文档。