gpt4 book ai didi

r - 将数据帧的行作为参数传递给函数,同时保持其他参数不变

转载 作者:行者123 更新时间:2023-12-02 00:37:35 24 4
gpt4 key购买 nike

跟进Pass rows of a data frame as arguments to a function in R with column names specifying the arguments :

我想使用不同的参数组合来训练以下模型:

library(xgboost)
library(Matrix)

df <- data.frame(y = sample(0:1, 1000, replace = TRUE),
a = rnorm(1000),
b = rnorm(1000),
c = rnorm(1000),
d = rnorm(1000))

train <- sparse.model.matrix(object = y~.-1, data = df)

model <- xgboost(data = train,
label = df$y,
# parameters
nrounds = 10,
subsample = 0.5,
colsample_bytree = 0.8)

我使用参数创建了一个网格,我想将网格的行传递到 xgboost 函数中,同时保留 datalabel 参数不变。

param <- expand.grid(nrounds = c(10, 50, 100),
subsample = c(0.5, 0.8, 0.9),
colsample_bytree = c(0.8))

我想使用列名来传递参数来指定它们(如果列名不是一个选项,列的顺序也将执行此操作),因为这将使调用可针对不同的函数进行扩展。

最佳答案

我遇到了类似的问题,一直徒劳地寻找,直到我在 Hadley 的 Advanced R 中找到它。这允许您传递出现在数据框中的参数,将列的名称作为参数。阅读此处:

https://adv-r.hadley.nz/functionals.html#pmap

所以,就在这里。通过 purrr::pmap 有一个解决方案。它将参数映射到函数上:

from Hadley's Advanced R, 8.4.5

这是我自己的代码,我最近与 quanteda 一起使用来处理 Kaggle SMS Spam 数据集。这些是我的参数的可能性:

tolower <- data_frame(tolower = c(TRUE, FALSE))
stem <- data_frame(stem = c(TRUE, FALSE))
remove_punct <- data_frame(remove_punct = c(TRUE, FALSE))

这是一个额外的好处,但不是必需的,但我发现我需要所有参数的组合来运行朴素贝叶斯模型。感谢 Y J 通过此 SO post :

expand.grid.df <- function(...) Reduce(function(...) merge(..., by=NULL), list(...))
parameters <- expand.grid.df(tolower, stem, remove_punct)

所以,现在我的参数如下所示:

> parameters
tolower stem remove_punct
1 TRUE TRUE TRUE
2 FALSE TRUE TRUE
3 TRUE FALSE TRUE
4 FALSE FALSE TRUE
5 TRUE TRUE FALSE
6 FALSE TRUE FALSE
7 TRUE FALSE FALSE
8 FALSE FALSE FALSE

现在神奇的是,通过 pmap 将参数传递给我选择的函数 (dfm):

mymodels <- pmap(parameters, dfm, x = mycorpus)

(x = mycorpus 是一个常量的额外参数,我想将其传递给 dfm)

这是我得到的:

> length(mymodels)
[1] 8
> mymodels[[1]]
Document-feature matrix of: 5,572 documents, 7,714 features (99.8% sparse).

希望这对您或其他研究此方法的人有帮助!

关于r - 将数据帧的行作为参数传递给函数,同时保持其他参数不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42112654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com