Как настроить условную целевую функцию с помощью 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()
Другие вопросы по тегам