我对python很新,并尝试将一些代码从matlab传输到python。我试图使用fmin_bfgs优化python中的函数。我总是尝试在可能的情况下对代码进行矢量化,但是遇到了以下我无法弄清楚的问题。这是一个测试示例。
from pylab import *
from scipy.optimize import fmin_bfgs
## Create some linear data
L=linspace(0,10,100).reshape(100,1)
n=L.shape[0]
M=2*L+5
L=hstack((ones((n,1)),L))
m=L.shape[0]
## Define sum of squared errors as non-vectorized and vectorized
def Cost(theta,X,Y):
return 1.0/(2.0*m)*sum((theta[0]+theta[1]*X[:,1:2]-Y)**2)
def CostVec(theta,X,Y):
err=X.dot(theta)-Y
resid=err**2
return 1.0/(2.0*m)*sum(resid)
## Initialize the theta
theta=array([[0.0], [0.0]])
## Run the minimization on the two functions
print fmin_bfgs(Cost, x0=theta,args=(L,M))
print fmin_bfgs(CostVec, x0=theta,args=(L,M))
使用非向量函数的第一个答案给出了正确的答案,它只是向量[5,2]。但是,第二个答案,使用成本函数的矢量化形式大致返回[15,0]。我已经发现15并不是从无处出现的,因为它是数据平均值加上截距的2倍,即$ 2 \乘以5 + 5 $。任何帮助是极大的赞赏。