r-parsnip如何知道如何将模型的"fit"参数与函数参数相匹配



我正试图从现有的建模函数fooparsnip包创建一个新模型。

我已经学习了在parsnip中构建新模型的教程,并在Github上学习了README,但有些事情我仍然搞不清楚。

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

想象一下,如果有一个特殊的模型函数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)

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

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

randomForest的示例,它使用ntree而不是默认的树参数。他们创建了一个翻译调用,将在评估过程中使用。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)

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

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

请特别注意value参数中的data元素。你可以在这里阅读更多。

最新更新