You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Optuna调优Tweedie目标XGBRegressor时float32溢出错误解决

解决XGBRegressor参数调优时的float32溢出问题

针对你遇到的仅在参数调优阶段出现Input contains infinity or a value too large for dtype('float32')错误的问题,可通过以下几个方向强制全流程使用float64精度,并优化数值稳定性:


1. 强制XGBoost使用float64精度

XGBoost默认会用float32进行计算(尤其是tree_method="hist"模式下),你可以在初始化XGBRegressor时显式指定dtype="float64",覆盖默认精度设置。

修改代码位置:

  • 在__fit_new_model的初始模型定义中添加参数:
regressor: XGBRegressor = XGBRegressor(
    random_state=42,
    tree_method="hist",
    dtype="float64",  # 强制使用float64
    n_estimators=100,
    early_stopping_rounds=100,
    objective="reg:tweedie",
    tweedie_variance_power=1.5,
    eval_metric=mean_absolute_percentage_error,
)
  • 在__get_tuned_model_parames的objective函数的param字典中添加:
param = {
    "tree_method": "hist",
    "dtype": "float64",  # 强制调优过程中使用float64
    "booster": trial.suggest_categorical("booster", ["gbtree", "dart"]),
    # ... 其余参数保持不变
}

2. 显式确认数据类型并强制转换

虽然你已处理过数据,但调优过程中可能因数据传递环节出现隐式类型转换,可在数据分割后强制转换为float64:

# 在__fit_new_model的train_test_split之后添加
import numpy as np

X_train = X_train.astype(np.float64)
y_train = y_train.astype(np.float64)
X_validation = X_validation.astype(np.float64)
y_validation = y_validation.astype(np.float64)

3. 优化Tweedie目标的参数与数值稳定性

你使用的reg:tweedie目标在variance_power接近2时,容易因目标值过大引发数值溢出,可做以下调整:

  • 暂时缩小tweedie_variance_power的取值范围,比如先排除1.9这类接近2的数值:
param["tweedie_variance_power"] = trial.suggest_categorical(
    "tweedie_variance_power", [1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8]
)
  • 对目标值做标准化/归一化处理,缩小数值范围:
# 在__get_tuned_model_parames中,数据传入后添加
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
y_train_scaled = scaler.fit_transform(y_train.values.reshape(-1, 1)).ravel()
y_validation_scaled = scaler.transform(y_validation.values.reshape(-1, 1)).ravel()

# 后续fit和评估使用缩放后的y值
regressor_model.fit(X=x_train, y=y_train_scaled, eval_set=[(x_validation, y_validation_scaled)], verbose=False)
predictions = regressor_model.predict(x_validation)
mape: float = mean_absolute_percentage_error(y_true=y_validation, y_pred=scaler.inverse_transform(predictions.reshape(-1, 1)).ravel())

4. 调整正则化参数的搜索范围

过小的lambda和alpha会削弱正则化效果,可能导致模型数值不稳定,可提高参数下限:

param = {
    # ... 其余参数
    "lambda": trial.suggest_float("lambda", 1e-2, 10.0),  # 从1e-2开始
    "alpha": trial.suggest_float("alpha", 1e-2, 10.0),   # 从1e-2开始
    # ... 其余参数
}

内容的提问来源于stack exchange,提问作者soumeng78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:33:35