optuna.pruners.ThresholdPruner

class optuna.pruners.ThresholdPruner(lower=None, upper=None, n_warmup_steps=0, interval_steps=1)[源代码]

用于检测试验中异常指标的修剪器。

如果指标超过上限阈值、低于下限阈值或达到 nan,则进行修剪。

示例

from optuna import create_study
from optuna.pruners import ThresholdPruner
from optuna import TrialPruned


def objective_for_upper(trial):
    for step, y in enumerate(ys_for_upper):
        trial.report(y, step)

        if trial.should_prune():
            raise TrialPruned()
    return ys_for_upper[-1]


def objective_for_lower(trial):
    for step, y in enumerate(ys_for_lower):
        trial.report(y, step)

        if trial.should_prune():
            raise TrialPruned()
    return ys_for_lower[-1]


ys_for_upper = [0.0, 0.1, 0.2, 0.5, 1.2]
ys_for_lower = [100.0, 90.0, 0.1, 0.0, -1]

study = create_study(pruner=ThresholdPruner(upper=1.0))
study.optimize(objective_for_upper, n_trials=10)

study = create_study(pruner=ThresholdPruner(lower=0.0))
study.optimize(objective_for_lower, n_trials=10)
参数:
  • lower (float | None) – 一个最小值,用于确定修剪器是否进行修剪。如果中间值小于下限,则进行修剪。

  • upper (float | None) – 一个最大值,用于确定修剪器是否进行修剪。如果中间值大于上限,则进行修剪。

  • n_warmup_steps (int) – 如果步数小于给定的预热步数,则禁用剪枝。

  • interval_steps (int) – 修剪检查之间的步数间隔,偏移预热步数。如果在修剪检查时没有报告值,则该特定检查将被推迟,直到报告值为止。值必须至少为1。

方法

prune(study, trial)

根据报告的值判断是否应该修剪试验。

prune(study, trial)[源代码]

根据报告的值判断是否应该修剪试验。

请注意,此方法不应由库用户调用。相反,optuna.trial.Trial.report()optuna.trial.Trial.should_prune() 提供了用户界面,用于在目标函数中实现剪枝机制。

参数:
  • study (Study) – 目标研究的研究对象。

  • trial (FrozenTrial) – 目标试验的 FrozenTrial 对象。在修改此对象之前,请先复制一份。

返回:

一个布尔值,表示是否应该修剪试验。

返回类型:

bool