Ошибка streamlit, optuna
Подскажите, как исправить ошибку в streamlit? Модель LGBM, бинарный классификатор. Для регрессии такой ошибки нет. Необходимо указать параметр direction в create study или дело в plotly? Как правильно? В юпитере выводится график, в стримлит ошибка.
код стримлит
fig = plot_optimization_history(study)
st.plotly_chart(fig))
ошибка AttributeError: 'Study' object has no attribute '_directions'
File "/usr/local/lib/python3.8/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 541, in _run_script
exec(code, module.__dict__)
File "/app/frontend/main.py", line 231, in <module>
main()
File "/app/frontend/main.py", line 227, in main
page_names_to_funcs[selected_page]()
File "/app/frontend/main.py", line 174, in training
start_training(config=config, endpoint=endpoint)
File "/app/frontend/src/train/training.py", line 64, in start_training
fig_imp = plot_param_importances(study)
File "/usr/local/lib/python3.8/site-packages/optuna/visualization/_param_importances.py", line 139, in plot_param_importances
importances_info = _get_importances_info(study, evaluator, params, target, target_name)
File "/usr/local/lib/python3.8/site-packages/optuna/visualization/_param_importances.py", line 41, in _get_importances_info
_check_plot_args(study, target, target_name)
File "/usr/local/lib/python3.8/site-packages/optuna/visualization/_utils.py", line 60, in _check_plot_args
if target is None and any(study._is_multi_objective() for study in studies):
File "/usr/local/lib/python3.8/site-packages/optuna/visualization/_utils.py", line 60, in <genexpr>
if target is None and any(study._is_multi_objective() for study in studies):
File "/usr/local/lib/python3.8/site-packages/optuna/study/study.py", line 1022, in _is_multi_objective
return len(self.directions) > 1
File "/usr/local/lib/python3.8/site-packages/optuna/study/study.py", line 207, in directions
return self._directions
Ответы (1 шт):
Optuna, используемая в вашем коде для оптимизации параметров модели LGBM (LightGBM), ожидает, что вы укажете направление оптимизации (direction) для вашего объекта study в случае бинарной классификации. Для бинарной классификации direction может быть установлен в 'maximize' или 'minimize' в зависимости от того, какую метрику вы пытаетесь оптимизировать. Например, если вы оптимизируете площадь под ROC-кривой (AUC-ROC), то 'maximize' будет соответствовать лучшему значению метрики.
# Создание study с указанием направления (например, 'maximize' для AUC-ROC)
study = optuna.create_study(direction='maximize')
# Запуск оптимизации
study.optimize(objective_function, n_trials=100)
# Где objective_function - ваша функция, которую вы оптимизируете
И соответственно если целевая метрика должна быть минимизирована (например, log loss) нужно заменить 'maximize' на 'minimize'.