Как настроить условную целевую функцию с помощью optuna или hyperopt
Я пытался использовать оптуну для настройки гиперпараметров. Но моя целевая функция условна, что создает проблемы при получении оптимальных параметров.
я хочу получить cwc, только если условие выполнено, иначе продолжите испытание для следующих гиперпараметров. Но я думаю, что так как условие не выполнено и объективная функция возвращается CWC, это дает ошибку
UnboundLocalError: локальная переменная 'cwc_train', на которую ссылаются до назначения
define objective (trial):
k_dis = trial.suggest_uniform('k_dis', 0.0, 5.0)
l_dis = trial.suggest_uniform('l_dis', 0.0, 5.0)
k_bound = trial.suggest_uniform('k_bound', 0.0, 5.0)
l_bound = trial.suggest_uniform('l_bound', 0.0, 5.0)
picp = .....
pinrw = .....
if picp_train >= 0.8 and pinrw_train < 0.18:
cwc_train = fc.CWC_proposed(predict_bound_train, Y_train)
else:
print("error = ")
return cwc_train
study = optuna.create_study()
study.optimize(objective, n_trials=100)
UnboundLocalError: локальная переменная 'cwc_train', на которую ссылаются до назначения
1 ответ
я хочу получить cwc, только если условие выполнено, иначе продолжите испытание для следующих гиперпараметров.
В этом случае, пожалуйста, поднимите optuna.structs.TrialPruned
вместо возврата cwc_train. Обратите внимание, что сэмплер по умолчанию (TPESampler
) знает об сокращенных решениях, чтобы снизить вероятность повторного отбора проб.
if picp_train >= 0.8 and pinrw_train < 0.18:
cwc_train = fc.CWC_proposed(predict_bound_train, Y_train)
return cwc_train
raise optuna.structs.TrialPruned()