【问题标题】:Loading large training data with R [duplicate]使用 R 加载大型训练数据 [重复]
【发布时间】:2014-08-17 08:36:13
【问题描述】:

我有以下代码行:

train <- read.csv("avito_train.tsv", sep='\t', stringsAsFactors = F)

训练文件大约 3 GB。加载所有这些数据需要很长时间。

我的问题是,一个合适的数据科学家会加载所有数据还是只使用一个子集?我注意到我可以使用nrows 参数来指定要读取的最大行数。

我也相信将所有这些数据加载到语料库中(我必须这样做)可能会非常耗时。对于使用大量训练和测试数据编写机器学习程序的推荐策略是否存在普遍共识?

【问题讨论】:

  • 有一些方法可以优化 R 中的数据加载。您告诉 R 必须加载的数据结构越多,加载数据的速度就越快。具体来说,如果你能告诉它有多少列,每列的数据类型是什么,并且如果你碰巧知道数据有多少行,R 将更容易加载它。
  • 谢谢;任何代码示例也会对我有所帮助;不过,我假设您指的是 read.csv() 方法上的参数。
  • 谢谢,我会尽力提供一个很好的例子。是的,我指的是 read.csv()。实际上我指的是 read.table,而 read.csv() 只是一个具有某些预设默认值的包装函数。
  • 查看fread() 包中的data.table。它比read.csv() 快得多。此外,您可以尝试使用函数load()save() 将尽可能多的数据保留为可以更快加载到R 中的二进制格式。
  • @konvas 谢谢。我忘了我可以在 R 中使用 save() 功能。这也应该很有帮助。

标签: r


【解决方案1】:

有一些方法可以优化 R 中的数据加载。您告诉 R 必须加载的数据结构越多,加载数据的速度就越快。具体来说,如果你能告诉它有多少列,每列的数据类型是什么,并且如果你碰巧知道数据有多少行,R 将更容易加载它。

这是一个我试图提高文件加载速度的示例。首先我得到文件中的列数:

ncols       <- length(read.table(file,header=TRUE,sep="\t", nrows=1, na.strings=c("null","NA"),comment="",quote=""))

在这个特定的文件中,我知道我不想要前 2 列,其余的都是数字,所以我使用了以下 read.table 调用

tumor_data  <- read.table(file,header=TRUE,sep="\t",
                     colClasses=c("NULL","NULL",rep("numeric",ncols-2)),
                     na.strings=c("null","NA"),comment="",quote="")

注意这个文件没有你的那么大,所以我想加载一个 3Gb 的文件仍然需要一段时间。

您可以查看此页面上的答案Quickly reading very large tables as dataframes in R,我发现这些答案很有帮助。如果 read.table 不适合您,您可能需要考虑使用 sqldf 包或类似的东西。

【讨论】:

  • 谢谢,我会试试这个。所以,答案似乎是,“是的,肯定会加载所有数据,但只需改变你处理它的方式。”
  • 使用所有可用数据始终是最佳的,即使您只训练其中的一部分,您也可能希望另一部分进行测试等等。出于开发原因测试您的代码,我当然可以设想只需要加载一些数据来确保一切都按预期运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 2020-05-27
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多