scipy.optimize.fmin_bfgs优化提供了与简单函数调用不同的结果

汉斯·罗格曼

我正在探索一些numpy / scipy函数,并且我注意到scipy.optimize.fmin_bfgs要求对被调用的函数进行更改以提供与直接函数调用相比正确的结果。我对fnRSS函数的第一个定义在调用函数时返回了正确的值,但拒绝进行优化。我的第二个定义在调用函数时给出了错误的结果,但在运行优化时给出了正确的结果。有人可以告诉我,为vY优化而调换参数有何关键它应该已经是164x1。

import numpy as np
import scipy as sp
import pandas as pd
from scipy import optimize

if __name__ == "__main__":
    urlSheatherData = "http://www.stat.tamu.edu/~sheather/book/docs/datasets/MichelinNY.csv"
    data = pd.read_csv(urlSheatherData)
    Xs = np.vstack(data[['Service','Decor', 'Food', 'Price']].values)
    Xs = np.concatenate((np.vstack(np.ones(Xs.shape[0])),Xs), axis=1)
    Ys = np.vstack(data[['InMichelin']].values)
    # optimal solution (given)
    vBeta = np.array([-1.49209249,  -0.01117662,  0.044193, 0.05773374, 0.00179794]).reshape(5,1)

    print Ys.shape, Xs.shape, vBeta.shape 
    # first definition of function
    def fnRSS(vBeta, vY, mX):
      return np.sum((vY - np.dot(mX, vBeta))**2) 
    print fnRSS(vBeta, Ys, Xs) # correct value
    print np.linalg.lstsq(Xs, Ys)[1] # confirm correct value
    print sp.optimize.fmin_bfgs(fnRSS, x0=vBeta, args=(Ys,Xs)) # wrong value
    # second definition
    def fnRSS(vBeta, vY, mX):
      return np.sum((vY.T - np.dot(mX, vBeta))**2) 
    print fnRSS(vBeta, Ys, Xs) # incorrect value
    print sp.optimize.fmin_bfgs(fnRSS, x0=vBeta, args=(Ys,Xs)) # correct convergence but simple call gives different value

我的输出:

(164, 1) (164, 5) (5, 1)
26.3239061505
[ 26.32390615]
Warning: Desired error not necessarily achieved due to precision loss.
         Current function value: 6660.000000
         Iterations: 39
         Function evaluations: 3558
         Gradient evaluations: 480
[  4.51220111e-01   1.32711255e-07   8.09143368e-08  -1.06633003e-07
  -5.18448332e-08]
9002.87916028
Warning: Desired error not necessarily achieved due to precision loss.
         Current function value: 26.323906
         Iterations: 29
         Function evaluations: 1954
         Gradient evaluations: 260
[-1.49209095 -0.0111764   0.04419313  0.05773347  0.00179789]

它不是关于vY.T,而是vBeta,即作为2d向量而不是1d数组x传递fmin_bfgsfnRSS因此,尽管您确实尝试明确指定x0=vBeta为形状(5,1)的数组,但仍会在内部将其转换为形状(5,)的1d数组,最后按原样返回。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

发生python scipy.optimize.fmin_l_bfgs_b错误

来自分类Dev

正确使用scipy.optimize.fmin_bfgs与R代码

来自分类Dev

scipy.optimize.fmin_slsqp的用法

来自分类Dev

scipy.optimize.fmin_slsqp的用法

来自分类Dev

Scipy.optimize.minimize返回错误的结果

来自分类Dev

Scipy.optimize.minimize返回错误的结果

来自分类Dev

函数scipy.optimize.minimize的选项

来自分类Dev

scipy.optimize高频正弦函数

来自分类Dev

scipy.optimize高频正弦函数

来自分类Dev

scipy.optimize.fmin_powell() 和 scipy.optimize.minimize(..., method='Powell') 的区别

来自分类Dev

Minimum(method ='BFGS')和scipy.optimize.fmin_bfgs之间的区别

来自分类Dev

cython vs python scipy.optimize.fsolve中的不同结果

来自分类Dev

如何强制scipy.optimize.fmin_l_bfgs_b使用'dtype = float32'

来自分类Dev

我如何从Scipy Optimize函数获取结果数组

来自分类Dev

scipy.optimize.leastsq使用NaN调用目标函数

来自分类Dev

使用scipy.optimize.minimize / l-bfgs时出错

来自分类Dev

通过 scipy.optimize.fmin 来自 numpy.root 的错误

来自分类Dev

多元优化-scipy.optimize输入解析错误

来自分类Dev

scipy.optimize.brentq在简单情况下无法收敛

来自分类Dev

scipy.optimize.leastsq无法拟合简单模型

来自分类Dev

scipy.optimize.brentq在简单情况下无法收敛

来自分类Dev

结合scipy.optimize.brute网格和结果

来自分类Dev

每次迭代绘制 Scipy optimize.minimize 收敛结果?

来自分类Dev

不打印“优化成功终止” scipy.optimize.fmin吗?

来自分类Dev

使用scipy.optimize处理非代数函数

来自分类Dev

`scipy.optimize` 函数即使使用 `maxiter=0` 也会挂起

来自分类Dev

scipy.optimize.basinhopping。带参数的对象函数

来自分类Dev

为什么我从scipy.optimize.fmin得到不正确的结果?

来自分类Dev

Cython:scipy.optimize.cython_optimize.brentq函数的mitr参数-此参数用于什么目的?

Related 相关文章

  1. 1

    发生python scipy.optimize.fmin_l_bfgs_b错误

  2. 2

    正确使用scipy.optimize.fmin_bfgs与R代码

  3. 3

    scipy.optimize.fmin_slsqp的用法

  4. 4

    scipy.optimize.fmin_slsqp的用法

  5. 5

    Scipy.optimize.minimize返回错误的结果

  6. 6

    Scipy.optimize.minimize返回错误的结果

  7. 7

    函数scipy.optimize.minimize的选项

  8. 8

    scipy.optimize高频正弦函数

  9. 9

    scipy.optimize高频正弦函数

  10. 10

    scipy.optimize.fmin_powell() 和 scipy.optimize.minimize(..., method='Powell') 的区别

  11. 11

    Minimum(method ='BFGS')和scipy.optimize.fmin_bfgs之间的区别

  12. 12

    cython vs python scipy.optimize.fsolve中的不同结果

  13. 13

    如何强制scipy.optimize.fmin_l_bfgs_b使用'dtype = float32'

  14. 14

    我如何从Scipy Optimize函数获取结果数组

  15. 15

    scipy.optimize.leastsq使用NaN调用目标函数

  16. 16

    使用scipy.optimize.minimize / l-bfgs时出错

  17. 17

    通过 scipy.optimize.fmin 来自 numpy.root 的错误

  18. 18

    多元优化-scipy.optimize输入解析错误

  19. 19

    scipy.optimize.brentq在简单情况下无法收敛

  20. 20

    scipy.optimize.leastsq无法拟合简单模型

  21. 21

    scipy.optimize.brentq在简单情况下无法收敛

  22. 22

    结合scipy.optimize.brute网格和结果

  23. 23

    每次迭代绘制 Scipy optimize.minimize 收敛结果?

  24. 24

    不打印“优化成功终止” scipy.optimize.fmin吗?

  25. 25

    使用scipy.optimize处理非代数函数

  26. 26

    `scipy.optimize` 函数即使使用 `maxiter=0` 也会挂起

  27. 27

    scipy.optimize.basinhopping。带参数的对象函数

  28. 28

    为什么我从scipy.optimize.fmin得到不正确的结果?

  29. 29

    Cython:scipy.optimize.cython_optimize.brentq函数的mitr参数-此参数用于什么目的?

热门标签

归档