1

我正在使用 optunta + catboost 来优化和训练一些增强的树。我想知道优化我的超参数以最大化准确性(而不是最小化对数损失)的正确方法。

目前我的代码是:

def objective(trial):
    pram = {
        'depth' = trial.suggest_int('depth', 4, 9),
        'learning_rate' = trial.suggest_float('learning_rate', 1e-5, 1e-1),
        'iterations' = trial.suggest_float('iterations', 100, 7500)
        'loss_function' = 'Logloss',
        'custom_loss' = 'Accuracy'
    }

    for step in range(50):
        cv = cb.cv(train_pool, param, fold_count = 3, verbose = 1000)
        acc = np.max(cv['test-Accuracy-mean'])
        trial.report(acc, step)
        if trial.should_prune():
            raise optuna.TrialPruned()
    return acc

study = optuna.create_study(direction = 'maximize')
study.optimize(objective, n_trials = 50)

这是否是调整超参数以最大化准确性而不是最小化对数损失的正确方法?

4

1 回答 1

0

从机器学习的角度来看,这看起来是正确的(我没有检查语法错误/不正确的库调用),但我不会采用交叉验证期间发现的最大平均准确度。相反,我会选择中值平均准确度,因为它是交叉验证期间超参数性能最可靠的指标。如果您使用最大平均准确度,那么在交叉验证期间训练的单个幸运模型可能会严重扭曲结果。

于 2021-06-30T16:30:16.730 回答