Python中函数的向量化和优化

时间:2014-11-18 17:48:17

标签: python mathematical-optimization

我对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 $。任何帮助是极大的赞赏。

0 个答案:

没有答案