欧洲防风草如何知道如何将`fit` 参数与模型的函数参数相匹配?

时间:2021-07-13 19:35:34

标签: r tidymodels r-parsnip

我正在尝试从现有建模函数 parsnipfoo 包创建新模型。

我已经遵循 tutorial 在欧洲防风草中构建新模型并遵循 README on Github,但我仍然无法弄清楚一些事情。

fit 中的 parsnip 函数如何知道如何将其输入数据(例如矩阵)分配给我的特殊函数调用?

想象一下,如果有一个特殊的模型函数 foo,其中 xy 参数的传统角色被颠倒了:即 foo(x,y),其中 x 应该是一个结果向量和y应该是一个预测矩阵,奇怪的是。

例如:假设 a 是预测变量矩阵,b 是结果向量。然后我打电话给fit_xy(object=my_model, x=a, y=b)。在内部,fit_xy() 如何知道调用 foo(x=y,y=x)

2 个答案:

答案 0 :(得分:3)

验证输入的函数是 check_final_param,它要求每个参数,例如必须被命名。这就是为什么顺序不重要的原因。 https://github.com/tidymodels/parsnip/blob/f7ba069671684f61af0ca1eadb1927fedec8a9c6/R/misc.R#L235

你所链接的README文件指出: “为了创建模型拟合调用,保护参数填充有适当的对象(通常来自数据集),并且 rlang::call2 用于创建可以执行的调用。“< /p>

使用 ntree 而不是默认树参数的 randomForest 示例。 他们创建了一个翻译调用,将在评估期间使用。 https://github.com/tidymodels/parsnip/blob/228a6dc6975fc91562b63d191e43d2164cc78e3d/R/rand_forest_data.R#L339

如果我们使用 call2 并解包命名的 args,则顺序无关紧要。正如我们所知,由于额外的翻译步骤,args 将被正确命名。

args <- list(na.rm = TRUE, trim = 0)

rlang::call2("mean", 1:10, !!!args)

答案 1 :(得分:1)

我们这样做的方法是通过 set_fit() 函数。大多数模型都非常合理,我们可以使用默认映射(例如,从 data 参数到 data 参数或 xx),但您是对的,某些模型使用不同的规范。这方面的一个例子是 Spark 模型,它使用 x 来表示我们通常通过 data 方法调用的 formula

Spark 的随机森林 set_fit() 函数如下所示:

set_fit(
  model = "rand_forest",
  eng = "spark",
  mode = "classification",
  value = list(
    interface = "formula",
    data = c(formula = "formula", data = "x"),
    protect = c("x", "formula", "type"),
    func = c(pkg = "sparklyr", fun = "ml_random_forest"),
    defaults = list(seed = expr(sample.int(10 ^ 5, 1)))
  )
)

请特别注意 data 参数的 value 元素。你可以read a bit more here

相关问题