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),
}