Pet*_*lis 5 sparse-matrix reshape tidyr h2o tidytext
我有一个标准化,整洁的"长"数据结构中的数据,我想上传到H2O,如果可能的话,在一台机器上进行分析(或者有一个明确的发现,我需要比现有更多的硬件和软件).数据很大但不是很大; 当它被投入稀疏矩阵(绝大多数单元为零)时,可能有7千万行3列的有效归一化形式,300k乘80k.
H2O中的分析工具需要采用后者,宽泛的格式.部分总体动机是看到各种硬件设置的限制在哪里分析这些数据,但目前我正在努力将数据放入H2O集群(在R可以将其全部保存在RAM中的机器上)因此无法对分析的大小限制做出判断.
试验数据如下所示,其中三列是"documentID","wordID"和"count":
1 61 2
1 76 1
1 89 1
1 211 1
1 296 1
1 335 1
1 404 1
这并不重要 - 因为这对我来说甚至不是真实的数据集,只是一个测试集 - 这个测试数据来自https://archive.ics.uci.edu/ml/machine-learning-databases/bag- of-words/docword.nytimes.txt.gz(谨慎,大下载).
为了进行分析,我需要在矩阵中为每个documentID创建一行,每个wordID都有一列,单元格是计数(该文档中该单词的数量).在R(例如)中,这可以使用tidyr::spread或(在这种特殊情况下由创建的密集数据帧spread太大)完成tidytext::cast_sparse,只要我很高兴数据保持在这个大小的数据R.
现在,最新版本的H2O(可从h2o.ai获得但尚未在CRAN上)具有as.h2o可理解稀疏矩阵的R函数,这适用于较小但仍然非平凡的数据(例如,在3500行的测试用例中x当密集版本需要22秒时,它会在3秒内导入7000列稀疏矩阵,但是当它获得我的300,000 x 80,000稀疏矩阵时,它会崩溃并显示以下错误消息:
asMethod(object)出错:文件中的Cholmod错误'问题太大'../Core/cholmod_dense.c,第105行
据我所知,前进有两种方法:
据我所知,H2O不具备的功能做#1,即相当于tidytext::cast_sparse或tidyr::spread它在R. 数据改写(munging)功能,看起来是非常有限的.但也许我错过了什么?所以我的第一个(不是很乐观)的问题是可以(以及如何)H2O从长到宽格式"投射"或"传播"数据?.
选项#2与此旧问题相同,其中接受的答案是以SVMlight格式保存数据.但是,我不清楚如何有效地执行此操作,并且不清楚SVMlight格式对于不打算使用支持向量机建模的数据有意义(例如,数据可能仅用于无监督的学习问题).如果我可以将我的稀疏矩阵保存在MatrixMarket格式中会更方便,这种格式由MatrixR中的包支持,但据我所知,不是H2O.MatrixMarket格式看起来与我原来的长数据非常相似,它基本上是一个空格分隔的文件,看起来像colno rowno cellvalue(带有两行标题).
我认为 #2 是你现在最好的选择,因为我们目前没有在 H2O 中执行此操作的功能。我认为这将是一个有用的实用程序,因此在这里为其创建了 JIRA 票证。我不知道什么时候能完成,所以我仍然建议暂时编码#2。
SVMLight/LIBSVM 格式最初是为特定的 SVM 实现而开发的(顾名思义),但它是通用的,根本不特定于 SVM。如果您没有标记数据,则可以在需要标签的位置填写虚拟值。
要以此格式导出 R data.frame,您可以使用此包,这里有更多信息。您可以通过在http://rdocumentation.org上搜索“svmlight”或“libsvm”来找到更好的软件包。
h2o.importFile()然后,您可以使用带有 的函数将稀疏文件直接读入 H2O parse_type = "SVMLight"。
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |