Evaluator 的接口

自定义 Evaluator 继承 DefaultEvaluator。通常只需覆盖候选公式专用的 fit_candidate 或 evaluate_candidate;若希望同时改变一般等式的行为,再覆盖 fit 或 evaluate。

split(context)

返回包含 train 与 validation 的两个 AgentContext 视图。

fit(f, y, context) / evaluate(f, y, context)

用于一般的 y = f 等式。只拟合 f 中的参数;评测结果必须是仅含数值的扁平字典。

fit_candidate(f, context) / evaluate_candidate(f, context)

仅在 y 是目标变量且 f 不依赖目标变量时调用,适合加入轨迹 Rollout 等候选公式专用逻辑。

def evaluate_formula(
    f: engine.Expression,
    y: engine.Expression,
    context: AgentContext,
    evaluator: DefaultEvaluator,
) -> dict[str, dict[str, Any]]:
    split = evaluator.split(context)
    train_context = split["train"]
    validation_context = split["validation"]
    is_candidate = y.to_str() == context.target and context.target not in f.variables
    fitted = evaluator.fit_candidate(f, train_context) if is_candidate else evaluator.fit(f, y, train_context)

    return {
        "train": evaluator.evaluate_candidate(fitted, train_context) if is_candidate else evaluator.evaluate(fitted, y, train_context),
        "validation": evaluator.evaluate_candidate(fitted, validation_context) if is_candidate else evaluator.evaluate(fitted, y, validation_context),
    }