Я использую логистическую регрессию с scipy.optimize.fmin_bfgs для минимизации функции стоимости. Функция стоимости остается постоянной для моего конкретного набора данных, и BFGS не сходится, поэтому я хочу применить регуляцию lasso + ridge.автоматически останавливает scipy.optimize.fmin_bfgs после n вызовов функций (не итераций BFGS!)
Теперь я хочу, чтобы попробовать оптимизировать затраты для различных значений параметров регуляризации lambda1/2 для того, чтобы найти наилучшее сочетание:
for lambda1 in range(...):
for lambda2 in range(..):
scipy.optimize.fmin_bfgs(...) # Optimize cost with lambda1 and lambda2
Проблема заключается в том, что, поскольку BFGS не сходящиеся, он остается «навсегда» в вызове для первых значений лямбда1/2.
Есть ли способ автоматически остановить fmin_bfgs через некоторое время? Параметр maxiter не помогает мне, потому что у меня есть 1000 образцов и большое количество функций/образцов, поэтому он не заканчивает одну такую итерацию в приемлемое время.
В scipy 0.11 fmin_bfgs имеет параметр maxfun - можно ли это как-то подражать в scipy 0.10?
EDIT: По многочисленным просьбам, вот некоторые важные фрагменты кода:
Функция вычисления стоимости (обычные обозначения применяются):
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)
Обходным путем было бы добавление определенного количества вызовов, которые счетчик выполняет сама функция, и 'raise' специальное исключение, когда будет достигнуто желаемое количество вызовов. –
@ Zhenya Спасибо! Я надеялся, что может быть проще, но я могу это сделать. – Cristina
@Denis Что вы подразумеваете под "delta X"? У меня есть мои учебные образцы в X, никаких изменений для них не сделано. – Cristina