首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Optuna的中间值与修剪

理解Optuna的中间值与修剪
EN

Stack Overflow用户
提问于 2021-11-16 13:26:54
回答 1查看 1.2K关注 0票数 1

我只是想了解更多关于中间步骤实际上是什么以及如何使用剪枝的更多信息,如果您使用的是不同的ml库,如: XGB、Pytorch等。

例如:

代码语言:javascript
复制
X, y = load_iris(return_X_y=True)
X_train, X_valid, y_train, y_valid = train_test_split(X, y)
classes = np.unique(y)
n_train_iter = 100

def objective(trial):
    global num_pruned
    alpha = trial.suggest_float("alpha", 0.0, 1.0)
    clf = SGDClassifier(alpha=alpha)
    for step in range(n_train_iter):
        clf.partial_fit(X_train, y_train, classes=classes)

        intermediate_value = clf.score(X_valid, y_valid)
        trial.report(intermediate_value, step)

        if trial.should_prune():
            raise optuna.TrialPruned()

    return clf.score(X_valid, y_valid)


study = optuna.create_study(
    direction="maximize",
    pruner=optuna.pruners.HyperbandPruner(
        min_resource=1, max_resource=n_train_iter, reduction_factor=3
    ),
)
study.optimize(objective, n_trials=30)

for step in range()部分的意义是什么?这样做不只是使优化需要更多的时间,并且您不会为循环中的每一步产生相同的结果吗?

我真的在努力找出对for step in range()的需求,而且每次您想要使用剪枝时都需要它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-17 03:18:48

基本的模型创建可以通过一次传递完整的训练数据集来完成。但是,仍然有一些模型可以通过在相同的训练数据集上进行再训练来改进(提高准确性)。

为了确保我们在这里不会浪费资源,我们将在通过intermediate_score使用验证数据集的每一步之后检查准确性,如果准确性没有提高,如果没有,我们将删除整个测试,跳过其他步骤。然后,我们进行下一次试验,询问alpha的另一个值--我们试图确定的超参数,它在验证数据集上具有最大的准确性。

对于其他图书馆来说,这只是问问我们自己,我们希望我们的模型是什么,准确性肯定是衡量模型胜任力的一个很好的标准。可能还有其他人。

例如金枪鱼修剪,我希望模型继续重新训练,但只在我的具体条件。如果中间值不能击败我的best_accuracy,如果步骤已经超过了我最大迭代的一半,那么就修剪这个试用版。

代码语言:javascript
复制
best_accuracy = 0.0


def objective(trial):
    global best_accuracy

    alpha = trial.suggest_float("alpha", 0.0, 1.0)
    clf = SGDClassifier(alpha=alpha)

    for step in range(n_train_iter):
        clf.partial_fit(X_train, y_train, classes=classes)

        if step > n_train_iter//2:
            intermediate_value = clf.score(X_valid, y_valid)

            if intermediate_value < best_accuracy:
                raise optuna.TrialPruned()

    best_accuracy = clf.score(X_valid, y_valid)

    return best_accuracy

Optuna在https://optuna.readthedocs.io/en/stable/reference/pruners.html有专门的剪枝器

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69990009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档