1

我正在尝试parsnip从现有的建模功能为包创建一个新模型foo

我已经按照教程在欧洲防风草中构建新模型并按照Github 上的 README 进行操作,但我仍然无法弄清楚一些事情。

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)

4

2 回答 2

3

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

您链接的自述文件指出:“要创建模型拟合调用,请使用适当的对象(通常来自数据集)填充保护参数,并使用rlang::call2来创建可以执行的调用。 "

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)
于 2021-07-13T22:31:57.120 回答
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你可以在这里阅读更多内容

于 2021-07-30T23:56:45.297 回答