寻找优化R的sparse.model.matrix的方法

时间:2017-08-21 22:56:52

标签: r data.table sparse-matrix

我有稀疏数据问题,通常需要计算稀疏模型矩阵。我最终应该收到的矩阵包含~95%的零。这通常是由于一个热点编码的因素变得稀疏,并进一步与这些稀疏矢量进行交互。

require(Matrix)
require(data.table)
require(magrittr)

n = 500000
p = 10
x.matrix = matrix(rnorm(n*p), n, p)
colnames(x.matrix) = sprintf("n%s", 1:p)

x.categorical = data.table(
  c1 = sample(LETTERS, n, replace = T),
  c2 = sample(LETTERS, n, replace = T),
  c3 = sample(LETTERS, n, replace = T)
)

x = cBind(x.matrix, x.categorical)

myformula = "~ n1 + n2 + n3 + n4 + n5 + n6 + n7 + n8 + n9 +n10 +
  c1 + c1*c2 + c3 + n1:c1"
mm = model.matrix(myformula %>% as.formula, x)
mm2 = sparse.model.matrix(myformula %>% as.formula, x)

我发现稀疏问题上sparse.model.matrix的性能比model.matrix(通常用于密集问题)更糟糕。这是使用Rstudio的分析工具揭示的。

sparse.model.matrix poor performance

这里稀疏模型矩阵比model.matrix花费更多的时间,并且使用几乎相同的内存量。在一些问题中,我发现当处理稀疏的数据时,sparse.model.matrix比model.matrix慢10倍。

有更好的方法来创建稀疏矩阵吗?我搜索了很多,但没有找到任何。或者,我有兴趣找到其他人或获得如何从头开始实现更智能的sparse.model.matrix的技巧,可能使用Rcpp或data.table函数

问题的根源在sparse2int,虽然我不太了解它的用途,但仍然有一些" FIXME"仍留在代码中。

0 个答案:

没有答案