如何在Julia的XGBoost v2.2.1中抑制训练迭代日志输出?
解决XGBoost v2.2.1在Julia中无法抑制训练输出的问题
针对你使用Julia 1.8.2和XGBoost v2.2.1时,设置print_every_n=0和verbosity=0仍有训练轮次train-rmse输出的情况,可尝试以下几种方法:
方法1:将verbosity移入参数字典
旧版本的XGBoost.jl可能要求verbosity参数放在参数字典中,而非作为xgboost函数的独立参数。修改参数配置:
params_xgb = Dict( :max_depth => Int(2), :eta => 0.01, :objective => "reg:squarederror", :print_every_n => Int(0), :verbosity => 0 # 将verbosity加入参数字典 )
调用时移除独立的verbosity=0参数:
@time m_xgb = xgboost(dtrain, num_round=50, param = params_xgb);
方法2:添加原生XGBoost的silent参数
部分旧版本的XGBoost Julia绑定依赖原生的silent参数控制输出,尝试添加该参数:
params_xgb = Dict( :max_depth => Int(2), :eta => 0.01, :objective => "reg:squarederror", :print_every_n => Int(0), :silent => 1 # 原生静默参数,1表示关闭所有训练输出 )
方法3:重定向输出(终极方案)
如果上述参数方法无效,说明输出来自XGBoost底层C库,可通过Julia的输出重定向捕获:
# Linux/macOS环境下重定向到/dev/null redirect_stdout(devnull) do @time m_xgb = xgboost(dtrain, num_round=50, verbosity=0, param = params_xgb); end
若输出流向错误流,可同时重定向stderr:
redirect_stderr(devnull) do redirect_stdout(devnull) do @time m_xgb = xgboost(dtrain, num_round=50, verbosity=0, param = params_xgb); end end
注意:你的代码中rand(T, ...)的T未定义,需替换为具体类型(如Float64)才能正常运行。
内容的提问来源于stack exchange,提问作者Richi W
相关产品推荐
相关产品推荐

