抑制 Optuna 的 cv_agg 二进制对数损失输出

3

如果我使用LightGBMTunerCV调整模型,总是会得到cv_agg的binary_logloss的大量结果。如果我在更大的数据集上执行此操作,这些(不必要的)io会降低优化过程的性能。

以下是代码:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import optuna.integration.lightgbm as lgb
import optuna

import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
warnings.simplefilter(action='ignore', category=UserWarning)
breast_cancer = load_breast_cancer()

X_train, X_test, Y_train, Y_test = train_test_split(breast_cancer.data, breast_cancer.target)

train_dataset = lgb.Dataset(X_train, Y_train, feature_name=breast_cancer.feature_names.tolist())
test_dataset = lgb.Dataset(X_test, Y_test, feature_name=breast_cancer.feature_names.tolist())
callbacks = [lgb.log_evaluation(period=0)]
tuner = lgb.LightGBMTunerCV({"objective": "binary", 'verbose': -1},
       train_set=test_dataset, num_boost_round=10,
       nfold=5, stratified=True, shuffle=True)


tuner.run()

输出结果:

feature_fraction, val_score: 0.327411:  43%|###################2      | 3/7 [00:00<00:00, 13.84it/s]
[1] cv_agg's binary_logloss: 0.609496 + 0.009315
[2] cv_agg's binary_logloss: 0.554522 + 0.00607596
[3] cv_agg's binary_logloss: 0.512217 + 0.0132959
[4] cv_agg's binary_logloss: 0.479142 + 0.0168108
[5] cv_agg's binary_logloss: 0.440044 + 0.0166129
[6] cv_agg's binary_logloss: 0.40653 + 0.0200005
[7] cv_agg's binary_logloss: 0.382273 + 0.0242429
[8] cv_agg's binary_logloss: 0.363559 + 0.03312

有没有办法消除这个输出?

谢谢你的帮助!


如果您之前调用set_verbosity并将其设置为CRITICAL,会发生什么?https://optuna.readthedocs.io/en/stable/reference/generated/optuna.logging.set_verbosity.html#optuna.logging.set_verbosity(LightGBMTunerCV的verbosity参数已弃用,建议使用此方法)。 - SamBob
不幸的是,设置optuna.logging.set_verbosity(optuna.logging.CRITICAL)不再静音任何行。 - NonStopAggroPop
1
遗憾。为什么不考虑使用 contextlib 将 stdout 重定向到 null,以便对该调用进行优化呢?这可能会节省一些性能。 - SamBob
可以了!虽然我认为这更像是一个解决方法,因为我正在将stdout导向日志文件,所以可能会错过一些可能被抛出的警告。我认为应该有一个更直接的参数来处理这个问题。但是我在文档中找不到任何信息。因此,非常感谢您的建议!谢谢! - NonStopAggroPop
1个回答

3
您可以在 LightGBMTunerCV() 中将 verbose_eval 参数的值设为 None。
例如:
tuner = lgb.LightGBMTunerCV({"objective": "binary", 'verbose': -1},
       train_set=test_dataset, num_boost_round=10,
       nfold=5, stratified=True, shuffle=True, verbose_eval=None)

这正是我一直在寻找的。将 verbose_eval 设置为 None 并不是我期望的输入来静音输出。谢谢! - NonStopAggroPop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接