"n_estimators": (50, 3000),
"learning_rate": (0.005, 0.3),
# Tree structure
- "num_leaves": (8, 256),
+ "num_leaves": (8, 512),
# Leaf constraints
"min_child_weight": (1e-5, 10.0),
- "min_child_samples": (5, 100),
+ "min_child_samples": (1, 200),
"min_split_gain": (1e-8, 1.0),
# Sampling
"subsample": (0.4, 1.0),
ranges = _build_ranges(default_ranges, log_scaled_params)
- return {
+ boosting_type = trial.suggest_categorical("boosting_type", ["gbdt", "dart"])
+
+ params: dict[str, Any] = {
# Boosting/Training
+ "boosting_type": boosting_type,
"n_estimators": _optuna_suggest_int_from_range(
trial, "n_estimators", ranges["n_estimators"], min_val=1, log=True
),
),
}
+ if boosting_type == "dart":
+ params["drop_rate"] = trial.suggest_float("drop_rate", 0.01, 0.5)
+ params["skip_drop"] = trial.suggest_float("skip_drop", 0.1, 0.7)
+
+ return params
+
elif regressor == REGRESSORS[2]: # "histgradientboostingregressor"
# Parameter order: boosting -> tree structure -> leaf constraints ->
# sampling -> regularization -> binning -> early stopping
)
bootstrap_type = trial.suggest_categorical("bootstrap_type", bootstrap_options)
- params = {
+ params: dict[str, Any] = {
# Boosting/Training
"boosting_type": boosting_type,
"iterations": _optuna_suggest_int_from_range(
),
# Sampling/Randomization
"bootstrap_type": bootstrap_type,
+ "leaf_estimation_method": trial.suggest_categorical(
+ "leaf_estimation_method", ["Newton", "Gradient"]
+ ),
"random_strength": trial.suggest_float(
"random_strength",
ranges["random_strength"][0],
ranges["rsm"][0],
ranges["rsm"][1],
),
- "leaf_estimation_method": trial.suggest_categorical(
- "leaf_estimation_method", ["Newton", "Gradient"]
- ),
}
if bootstrap_type == "Bayesian":