我使用逻辑回归和scipy.optimize.fmin_bfgs来最小化成本函数。对于我的特定数据集,成本函数保持不变,并且 BFGS 不收敛,所以我想应用 lasso+ridge 正则化。
现在,我想尝试优化正则化参数 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)