【问题标题】:Correct way to optimise hyperparameters based on accuracy基于准确性优化超参数的正确方法
【发布时间】:2021-06-30 16:24:27
【问题描述】:

我正在使用 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)

这是调整超参数以最大限度地提高准确性而不是最大限度地减少对数损失的正确方法吗?

【问题讨论】:

    标签: python machine-learning catboost optuna


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帮助!使用中位数而不是平均值的好点!请问我将如何在catboost上实现这个?根据link,标准输出是均值和标准。如何获得中位数?
    • @Isaac 仔细阅读:中值平均准确度。即np.median(cv['test-Accuracy-mean'])
    • 抱歉给您带来的误会!感谢您的帮助!
    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 2022-09-30
    • 2019-11-22
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2015-09-20
    相关资源
    最近更新 更多