gpt4 book ai didi

R:创建稀疏模型矩阵的快速方法

转载 作者:行者123 更新时间:2023-12-04 11:06:55 25 4
gpt4 key购买 nike

我正在尝试使用具有许多交互项(一些是连续的,一些 0-1,一些具有多个级别的因素)的公式创建模型矩阵。这个模型矩阵的创建是我脚本的瓶颈。最后,模型矩阵是 8M 行,1000 列。由于具有多个级别的因子是 0-1 编码的,因此表示交互作用的结果矩阵非常稀疏,所以我已经使用了 sparse.model.matrix .

有没有更快的方法来生成这个矩阵?也许在Rcpp?

最佳答案

您是否考虑过使用 caretdummyVars ?它对我有用,而且看起来相当快。
?dummyVars比较 model.matrix 的默认行为和 dummyVars ,但并没有说太多。

对于 reproducible example 上的小型性能基准测试:

n = 1e3 # observations
m = 1e2 # variables
some_levels <- sort(c(LETTERS, letters))
library('microbenchmark')
set.seed(1234)

df <- data.frame(
lapply(1:m, function(x){
switch(sample.int(3,1),
# "some continuous, some 0-1"
'1' = rnorm(n), '2' = rbinom(n, 1, 0.5),
# "some factors with many levels"
'3' = factor(sample(some_levels, n, TRUE),
levels=some_levels )
)
})
)
names(df) <- paste0('V',1:m)

#------------- it sounds like you are doing something like this --------------
frm <- as.formula( paste('~', paste(names(df), collapse='+') ) )
library('Matrix')
microbenchmark(
mm <- sparse.model.matrix(frm, df)
) # mean = .133 sec (YMMV)

#---------------- you could try something like this --------------------------
library('caret')
microbenchmark(
mm2 <- dummyVars(frm, df, fullRank=TRUE)
) # mean = .00954 sec (YMMV)

备注 fullRank = TRUE以便“因子被编码为与 model.matrix 一致,并且由此产生的 [原文如此] 在列之间没有引入线性相关性,”每 ?dummyVars .您可能想要删除 fullRank = TRUE诱导 sparse=TRUE的行为在 contr.ltrfsparse.model.matrix .我找不到明确的文档。

关于R:创建稀疏模型矩阵的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31373710/

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