Я использую scipy.optimize.fmin_l_bfgs_b для решения проблемы гауссовой смеси. Средние распределения смесей моделируются регрессиями, веса которых должны быть оптимизированы с использованием алгоритма EM.
sigma_sp_new, func_val, info_dict = fmin_l_bfgs_b(func_to_minimize, self.sigma_vector[si][pj],
args=(self.w_vectors[si][pj], Y, X, E_step_results[si][pj]),
approx_grad=True, bounds=[(1e-8, 0.5)], factr=1e02, pgtol=1e-05, epsilon=1e-08)
Но иногда я получал предупреждение «ABNORMAL_TERMINATION_IN_LNSRCH» в информационном словаре:
func_to_minimize value = 1.14462324063e-07
information dictionary: {'task': b'ABNORMAL_TERMINATION_IN_LNSRCH', 'funcalls': 147, 'grad': array([ 1.77635684e-05, 2.87769808e-05, 3.51718654e-05,
6.75015599e-06, -4.97379915e-06, -1.06581410e-06]), 'nit': 0, 'warnflag': 2}
RUNNING THE L-BFGS-B CODE
* * *
Machine precision = 2.220D-16
N = 6 M = 10
This problem is unconstrained.
At X0 0 variables are exactly at the bounds
At iterate 0 f= 1.14462D-07 |proj g|= 3.51719D-05
* * *
Tit = total number of iterations
Tnf = total number of function evaluations
Tnint = total number of segments explored during Cauchy searches
Skip = number of BFGS updates skipped
Nact = number of active bounds at final generalized Cauchy point
Projg = norm of the final projected gradient
F = final function value
* * *
N Tit Tnf Tnint Skip Nact Projg F
6 1 21 1 0 0 3.517D-05 1.145D-07
F = 1.144619474757747E-007
ABNORMAL_TERMINATION_IN_LNSRCH
Line search cannot locate an adequate point after 20 function
and gradient evaluations. Previous x, f and g restored.
Possible causes: 1 error in function or gradient evaluation;
2 rounding error dominate computation.
Cauchy time 0.000E+00 seconds.
Subspace minimization time 0.000E+00 seconds.
Line search time 0.000E+00 seconds.
Total User time 0.000E+00 seconds.
Я не получаю это предупреждение каждый раз, но иногда. (Большинство получают «СХОДИМОСТЬ: NORM_OF_PROJECTED_GRADIENT_‹=_PGTOL» или «СХОДИМОСТЬ: REL_REDUCTION_OF_F_‹=_FACTR*EPSMCH»).
Я знаю, что это означает, что минимум может быть достигнут в этой итерации. Я погуглил эту проблему. Кто-то сказал, что это происходит часто, потому что целевая функция и функция градиента не совпадают. Но здесь я не предоставляю функцию градиента, потому что использую «приблизительно_град».
Каковы возможные причины, которые я должен исследовать? Что означает выражение «ошибка округления преобладает в вычислениях»?
======
Я также обнаружил, что логарифмическая вероятность не увеличивается монотонно:
########## Convergence !!! ##########
log_likelihood_history: [-28659.725891322563, 220.49993177669558, 291.3513633060345, 267.47745327823907, 265.31567762171181, 265.07311121000367, 265.04217683341682]
Обычно оно начинает уменьшаться на второй или третьей итерации, даже через 'ABNORMAL_TERMINATION_IN_LNSRCH' не происходит. Не знаю, связана ли эта проблема с предыдущей.