我使用逻辑回归与 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)
答案 0 :(得分:1)
您的问题不是迭代次数。 lambda数不变的原因是优化不起作用。 Scipy应该为你编制这些数字而不是通过for循环提供它们。
也许如果你能包含更多代码,就会更容易看到如何修复它。