我的数据集为22 GB。我想在我的笔记本电脑上处理它。当然我无法将其加载到内存中。
我使用了很多sklearn,但用于更小的数据集。
在这种情况下,经典方法应该是这样的。
只读部分数据 - >部分训练您的估算器 - >删除数据 - >阅读其他部分数据 - >继续训练你的估算师。
我已经看到一些sklearn算法具有部分拟合方法,应该允许我们用数据的各种子样本训练估计量。
现在我想知道为什么要在sklearn中这么做? 我正在寻找像
这样的东西r = read_part_of_data('data.csv')
m = sk.my_model
`for i in range(n):
x = r.read_next_chunk(20 lines)
m.partial_fit(x)
m.predict(new_x)
也许sklearn不是这类东西的合适工具? 让我知道。
答案 0 :(得分:13)
我使用了几个具有核外功能的scikit-learn分类器来训练线性模型:超过30Gb的Kaggle数据集上的随机梯度,感知器和被动攻击性以及多项式朴素贝叶斯。所有这些分类器都共享你提到的partial_fit方法。有些人表现得比其他人好。
您可以在本文中找到方法论,案例研究和一些好的资源: http://www.opendatascience.com/blog/riding-on-large-data-with-scikit-learn/
答案 1 :(得分:10)
我认为sklearn适合更大的数据。如果您选择的算法支持partial_fit或在线学习方法,那么您就会进入正轨。需要注意的一点是,你的大小可能会影响你的成功。
此链接可能有用...... Working with big data in python and numpy, not enough ram, how to save partial results on disc?
我同意h5py非常有用,但您可能希望使用已经存在于箭袋中的工具。
您可以做的另一件事是随机选择是否在csv文件中保留一行...并将结果保存到.npy文件中,以便加载更快。通过这种方式,您可以获得数据样本,这样您就可以开始使用所有算法...并处理更大的数据问题(或者根本不处理!有时采用良好方法的样本就足够了取决于你想要的东西。
答案 2 :(得分:3)
您可能需要查看Dask或Graphlab
它们类似于熊猫,但处理大规模数据(使用核心外数据帧)。 pandas的问题是所有数据都必须适合内存。
两个框架都可以与scikit学习一起使用。您可以将22 GB的数据加载到Dask或SFrame中,然后使用sklearn。
答案 3 :(得分:1)
我觉得有趣的是你选择使用Python进行统计分析而不是R,但是,我首先将我的数据放入可以处理如此大型数据集的格式。 python h5py包非常适合这种存储 - 允许非常快速地访问您的数据。您需要以合理的大小对数据进行分块,例如100万个元素块,例如:将每个块写入H5文件的20列x 50,000行。接下来,您需要考虑您正在运行的模型 - 您还没有真正指定过。
事实是,您可能必须编写模型算法和机器学习交叉验证,因为数据很大。首先编写一个算法来总结数据,以便您知道自己在看什么。然后,一旦确定要运行的模型,就需要考虑交叉验证的内容。放入"列"进入数据集的每个块,表示每行属于哪个验证集。您可以选择将每个块标记为特定的验证集。
接下来,您需要编写一个map reduce style算法,以在验证子集上运行您的模型。另一种方法是在每个验证集的每个块上运行模型并对结果取平均值(考虑这种方法的理论有效性)。
考虑使用spark,或R和rhdf5或类似的东西。我还没有提供任何代码,因为这是一个项目,而不仅仅是一个简单的编码问题。