Одна из итераций в серии экспериментов, которые устраивает Скопт, на самом деле занимает слишком много времени, чтобы завершиться, исходя из времени, которое CatBoost уже записал.
Если вы исследуете, когда это происходит, устанавливая многословие классификатора, и используете обратный вызов, чтобы выяснить, какую комбинацию параметров исследует Скопт, вы можете обнаружить, что виновником, скорее всего, являются параметры глубины: Скопт будет медленнымвниз, когда CatBoost пытается проверить более глубокие деревья.
Вы также можете попробовать отладить, используя этот пользовательский обратный вызов:
counter = 0
def onstep(res):
global counter
args = res.x
x0 = res.x_iters
y0 = res.func_vals
print('Last eval: ', x0[-1],
' - Score ', y0[-1])
print('Current iter: ', counter,
' - Score ', res.fun,
' - Args: ', args)
joblib.dump((x0, y0), 'checkpoint.pkl')
counter = counter+1
Вы можете вызвать его по:
resultCAT = bayes_cv_tuner.fit(X_train, y_train, callback=[onstep, status_print])
На самом деле я заметил ту же проблему, что иВ моих экспериментах сложность возрастает нелинейно по мере увеличения глубины, и, следовательно, CatBoost требует больше времени для выполнения своих итераций.Простое решение - попытаться найти более простое пространство:
'depth':(2, 8)
Обычно глубины 8 достаточно, во всяком случае, вы можете сначала запустить skopt с максимальной глубиной, равной 8, а затем повторить итерацию, увеличив максимум.