假设我想同时尝试 LGBM 和 XGBoost,它们都有几个同名的超参数:
estimator_name = trial.suggest_categorical("estimator_name", ["lgbm", "xgboost"])
if estimator_name == "lgbm":
params = {
"reg_alpha": trial.suggest_loguniform("reg_alpha", 1/1024, 1024),
# ...
}
estimator = LGBMClassifier(**params)
elif estimator_name == "xgboost":
params = {
"reg_alpha": trial.suggest_loguniform("reg_alpha", 1/1024, 1024),
# ...
}
estimator = XGBClassifier(**params)
estimator.fit( ... )
在 LGBM 和 XGBoost 中,reg_alpha
有不同的含义,因为 LGBM 工作在叶级别,而 XGBoost 工作在特征级别。所以在这种情况下,不同的值reg_alpha
会产生非常不同的效果,具体取决于 的值estimator_name
。
Optuna 能否妥善处理此问题?还是有更好的方法我应该这样做?