使用数组作为参数最小化函数

时间:2014-02-07 04:23:55

标签: python numpy scipy

我有一个功能,我想最小化。它是普通最小二乘的矢量化版本。

import numpy as np
from scipy import optimize

def lr_cost_function(theta, x, y, derivative = False, hypotesis=linear_hypotesis, polynom = 1):
    hyp = hypotesis(theta, x, polynom)
    print("Hyp: ", hyp.shape)
    dif = hyp - y
    print("Dif:", dif.shape)
    reuslt = dot(dif.T,dif)
    print("RES", reuslt.shape)
    return 1/len(y)*(dot(dif.T,dif)[0,0])

def linear_hypotesis(theta, x, polynom = 1):
    print(x.shape, theta.shape, type(theta))
    return np.dot(x, theta)

所以我这样称呼最小化:

optimize.minimize(fun=lr_cost_function, x0=theta_copy, args=(x, y))

并且我的代码无法完成,因为在optimize.py参数x0 flatten中我的矢量化被完全打破(0.13.2 scipy版本中的第822行)。我甚至无法完成代码并看到结果,因为我没有足够的内存,一切都出错了计算dif。

1 个答案:

答案 0 :(得分:0)

我对数组的维度有点混乱,所以得到了这个错误。我的theta(它是2-D数组)应该是扁平化的,并且代码中的所有向量(也是2-D数组)都应该变平,因此代码可以在最小的变化下工作。