我正在寻找一个宝石,它将CSV数据集拆分成更小的数据集,用于在机器学习系统上进行培训和测试。根据随机抽样, R 中有一个包可以做到这一点;但是我的研究在Ruby中没有发现任何东西。我想在Ruby中这样做的原因是原始数据集非常大,例如1700万行或5.5演出。 R 期望将整个数据集加载到内存中。 Ruby更灵活。任何建议将不胜感激。
答案 0 :(得分:1)
这会将原始数据分区为两个文件而不将其全部加载到内存中:
require 'csv'
sample_perc = 0.75
CSV.open('sample.csv','w') do |sample_out|
CSV.open('test.csv','w') do |test_out|
CSV.foreach('alldata.csv') do |row|
(Random.rand < sample_perc ? sample_out : test_out) << row
end
end
end
答案 1 :(得分:0)
CSV内置于ruby中,您不需要任何宝石来执行此操作:
require 'csv'
csvs = (1..10).map{|i| CSV.open("data#{i}.csv", "w")}
CSV.foreach("data.csv") do |row|
csvs.sample << row
end
CSV.foreach不会将整个文件加载到内存中。
答案 2 :(得分:0)
您可能希望根据Ruby的捆绑csv
gem编写自己的代码。如何分割数据有很多可能性,并且在如此大的数据集上有效地执行此操作的要求非常专业,同时也不需要那么多代码。
但是,您可能会看到ai4r
我还没有找到许多用于Ruby的成熟的预先打包的机器学习算法(你可能也会在R或Python的scikitlearn
中找到)。没有随机森林,gbm等 - 或者如果有,它们很难找到。 是到R的Ruby接口。也是ATLAS的包装器。我也没试过。
我确实使用ruby-fann
(神经网络),而宝石narray
是你的大数值数据集的朋友。
答案 3 :(得分:0)
你可以使用smarter_csv Ruby gem并将chunk_size设置为所需的样本大小, 然后将这些块保存为Resque作业,然后可以并行处理。
https://github.com/tilo/smarter_csv
查看GitHub页面上的示例。