SuperAPI AI 工具集

hardhat

数据与分析

查看项目

更新于 10-16 09:13

技能介绍

用途

hardhat 是一个 R 包,用于构建建模包(modeling packages),为这类包提供一致、标准化的接口基础设施。它的核心目标是统一预处理流程,使模型包能够同时支持公式(formula)、XY(数据框/矩阵)以及 recipe 三种输入方式,并遵循 tidymodels 的实现约定。

主要能力

预处理标准化

  • mold():用于训练数据的预处理,返回 predictors(tibble)、outcomes(tibble)、extras 和 blueprint。
  • forge():用于预测数据的预处理,依据训练时保存的 blueprint 处理新数据。

蓝图(Blueprint)机制

提供三种默认蓝图,各自带有选项:

  • default_xy_blueprint():选项 intercept。
  • default_formula_blueprint():选项 intercept、indicators("traditional"、"none"、"one_hot")。
  • default_recipe_blueprint():选项 intercept。

公式接口的特殊行为:默认不含截距(与 base R 不同);indicators = "none" 时保留因子不展开;多变量结果使用 y1 + y2 ~ x1 + x2 形式(而非 cbind())。

模型对象构造

new_model() 用于创建模型类对象,命名约定为 new_<model_class>(),需传入 blueprint 与 class。

预测输出格式化

spruce_*() 系列函数将预测结果标准化为 tidymodels 约定:

  • spruce_numeric(pred):输出列 .pred
  • spruce_class(pred):输出列 .pred_class
  • spruce_prob(pred_matrix):输出列 .pred_{class_name}

验证函数

  • validate_outcomes_are_univariate():检查单一结果列
  • validate_prediction_size():检查输出行数等于输入行数
  • validate_outcomes_are_numeric():检查结果为数值型
  • validate_predictors_are_numeric():检查预测变量为数值型

forge() 自动验证

forge() 会自动校验新数据与训练数据的一致性:列名必须匹配;列类型必须兼容;因子水平必须是训练水平的子集;有损转换会发出警告(新水平 → NA)。例如:缺失列 → 报错;类型错误(因子用 double)→ 报错;因子用字符 → 静默转换;出现新因子水平 → 警告 + NA。

使用方式

构建建模包时,通常按以下架构组织代码:

阶段一:模型拟合

用户 → simple_lm() 方法(formula/xy/recipe)→ bridge → implementation → constructor。其中 bridge 调用 mold(),implementation 执行核心算法(如 lm.fit()),constructor 调用 new_model()。

  • 模型构造器:new_<model_class>(),例如 new_simple_lm(),内部调用 new_model()。
  • 实现函数:<model_class>_impl(),例如 simple_lm_impl(),返回模型元素的命名列表。
  • 桥接函数:<model_class>_bridge(),例如 simple_lm_bridge(),将 mold() 输出转换为实现函数所需格式,并调用构造器。
  • 面向用户的拟合函数:泛型 simple_lm(),并为 data.frame、matrix、formula、recipe 分别提供方法,每个方法先调用 mold() 再调用 bridge。

阶段二:模型预测

用户 → predict.simple_lm() → bridge → implementation。其中 bridge 调用 forge(),implementation 使用 switch() 分派到 predict_*_numeric() 等函数。

  • 预测实现函数:每种预测类型一个函数,例如 predict_simple_lm_numeric(),使用 spruce_*() 标准化输出。
  • 预测桥接函数:例如 predict_simple_lm_bridge(),转换 forge() 输出并按 type 分派。
  • 面向用户的预测方法:predict.simple_lm(),先以 blueprint 调用 forge(),再调用 bridge,最后用 validate_prediction_size() 校验。

查看文档

可通过 R 打开 vignette:

  • RShowDoc("mold", package = "hardhat"):为建模准备数据
  • RShowDoc("forge", package = "hardhat"):为预测准备数据
  • RShowDoc("package", package = "hardhat"):创建建模包
  • browseVignettes("hardhat"):浏览全部 vignette

适用场景

适用于需要创建 R 建模包、并希望为公式、数据框、矩阵和 recipe 接口提供标准化预处理的开发者。也适合希望遵循 tidymodels 实现原则、统一预测输出格式与数据校验流程的建模包作者。

限制

资料未提供关于收费、价格、平台支持范围、性能效果等方面的信息,暂未提供。