【问题标题】:Importing sparse matrix to h2o instance is very slow将稀疏矩阵导入 h2o 实例非常慢
【发布时间】:2017-06-26 05:34:13
【问题描述】:

我在 R 中有一个 [210,000 x 500] 稀疏矩阵,我正在尝试使用 h2o 进行聚类。 我想象一个 210,000 行的矩阵对于 h2o 来说并没有那么大,但是当我尝试将它导入到 h2o 实例时它需要很长时间(让它运行超过 10 分钟并在完成前停止它) 当我对稀疏矩阵中的前 10,000 行进行子集化并将其导入时,只需几秒钟。我已经尝试逐步进行,这需要很长时间。 (60,000 我停止了) 这是正常的还是我做错了什么?

这是我正在使用的

library(h2o)
localH2O <- h2o.init(nthreads = -1, max_mem_size = "16g")     
spmx.h2o <- as.h2o(sparse_mx)

以下是生成 h2o 实例时的更多信息:

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Starting H2O JVM and connecting: . Connection successful!

    R is connected to the H2O cluster: 
        H2O cluster uptime:         6 seconds 779 milliseconds 
        H2O cluster version:        3.10.4.6 
        H2O cluster version age:    1 month and 30 days  
        H2O cluster name:           H2O_started_from_R_M_vto433 
        H2O cluster total nodes:    1 
        H2O cluster total memory:   14.22 GB 
        H2O cluster total cores:    4 
        H2O cluster allowed cores:  4 
        H2O cluster healthy:        TRUE 
        H2O Connection ip:          localhost 
        H2O Connection port:        54321 
        H2O Connection proxy:       NA 
        H2O Internal Security:      FALSE 
        R Version:                  R version 3.4.0 (2017-04-21) 

我试图避免将矩阵写入文件并再次导入,只是因为我认为 210,000 行和 500 列不应该是 h2o 处理的问题

【问题讨论】:

标签: r performance import sparse-matrix h2o


【解决方案1】:

目前似乎不太可能直接通过 R 将大小稍大的稀疏矩阵导入 h2o 实例。相反,通过 SVMLight 文件导入要快得多。在这里讨论

How to get sparse matrices into H2O?


编辑:寻找将稀疏矩阵文件转换为 SVMLight 格式(高效且快速的算法) 我尝试使用 laurai2/sparsity 包将稀疏矩阵有效转换为 SVMLgith 格式文件。但是由于某些 Cpp 编译错误,我无法安装该软件包。 根据@Dmitriy Selivanov 的建议,我使用了sparsio 包,可以轻松地将稀疏矩阵转换为SVMLight 格式并快速导入到h2o。

## The following works
library(sparsio)
library(h2o)
write_svmlight(x = spmx, file = "spmx_svmlight.txt", zero_based = FALSE) #h2o accepts one_based by default

localH2O <- h2o.init(nthreads = -1, max_mem_size = "16g")  
spmx.h2o <- h2o.importFile("spmx_svmlight.txt", parse = TRUE) 

我的数据集大小仍然很小,我不确定 write_svmlight 在更大的数据集上的效果如何。我的数据用了大约 40 秒,没关系。

【讨论】:

  • 查看快速 svmlight 读写器的 sparsio 包。我上周把它放在起重机上。
  • 感谢@Dmitriy Selivanov。我一直试图安装 laura2/sparsity 包无济于事。我会尝试使用 sparsio。
  • sparsio 不会转换 dgCMatrix 类型,是吗?
  • 所以,我使用 sparsio 包将我的 dgCMatrix 类型的稀疏矩阵转换为 SVMlight,但将其导入 h2o 时出错。我收到此错误:“错误 = '列以非递增序列出现。在 1 之后得到 0。跳过该行的其余部分。'
  • 我认为 h2o 默认接受 one_based SVMlight 文件。因此,我将文件更改为基于文件的文件,并且可以正常工作。再次感谢您的时间和帮助!一切都好。
猜你喜欢
  • 2014-11-01
  • 2015-12-26
  • 2014-11-13
  • 1970-01-01
  • 2018-01-19
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
相关资源
最近更新 更多