n次函数调用后自动停止scipy.optimize.fmin_bfgs(不是BFGS迭代!)

时间:2012-04-25 08:50:25

标签: python optimization scipy regression

我使用逻辑回归与 scipy.optimize.fmin_bfgs 来最小化成本函数。成本函数对于我的特定数据集保持不变,并且BFGS不收敛,所以我想应用套索+岭正则化。

现在,我想尝试优化正则化参数lambda1 / 2的各种值的成本,以便找到最佳组合:

for lambda1 in range(...):
    for lambda2 in range(..):
        scipy.optimize.fmin_bfgs(...) # Optimize cost with lambda1 and lambda2

问题在于,因为BFGS没有收敛,所以它在“lambda1 / 2”的第一个值的调用中保持“永久”。

有一种方法可以在一段时间后自动停止fmin_bfgs吗? maxiter 参数对我没有帮助,因为我有1000个样本和大量的特征/样本,所以它甚至没有在可接受的时间内完成一次这样的迭代。

在scipy 0.11中,fmin_bfgs有一个 maxfun 参数 - 可以在scipy 0.10中以某种方式模拟这个吗?

编辑:根据大众需求,以下是一些相关的代码片段:

计算成本的函数(通常的符号适用):

def computeCost(theta, X, y):
    h = sigmoid(X.dot(theta.T))
    J = y.T.dot(log(h)) + (1.0 - y.T).dot(log(1.0 - h))
    J_reg2 = theta[1:]**2
    J_reg1 = theta[1:]
    cost = (-1.0 / m) * (J.sum() + LAMBDA2 * J_reg2.sum() + LAMBDA1 * J_reg1.sum())
    return cost

调用fmin_bfgs函数:

initial_thetas = numpy.zeros((len(train_X[0]), 1))
myargs = (train_X, train_y)
theta = scipy.optimize.fmin_bfgs(computeCost, x0=initial_thetas, args=myargs)

1 个答案:

答案 0 :(得分:1)

您的问题不是迭代次数。 lambda数不变的原因是优化不起作用。 Scipy应该为你编制这些数字而不是通过for循环提供它们。

也许如果你能包含更多代码,就会更容易看到如何修复它。