我有一个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不是处理这些事情的合适工具?
我在超过30Gb的Kaggle数据集上使用了几个具有核心外功能的scikit-learn分类器来训练线性模型:随机梯度,感知器和被动攻击以及多项朴素贝叶斯。所有这些分类器都共享您提到的partial_fit方法。不过有些人表现得比其他人好。
你可以在这篇文章中找到方法论、案例研究和一些很好的资源:http://www.opendatascience.com/blog/riding-on-large-data-with-scikit-learn/
我认为sklearn适合大数据。如果你选择的算法支持partial_fit或在线学习方法,那么你就走上了正轨。需要注意的一件事是,你的块大小可能会影响你的成功。
这个链接可能有用…在python和numpy中处理大数据,没有足够的内存,如何将部分结果保存在磁盘上?
我同意h5py是有用的,但你可能希望使用已经在你的箭袋里的工具。
你可以做的另一件事是随机选择是否在你的csv文件中保留一行…并将结果保存到.npy文件中,以便更快地加载。这样你就可以得到一个数据样本,让你可以开始用所有的算法来玩它……并在此过程中处理更大的数据问题(或者根本不处理!)有时候一个方法好的样本就足够好了,这取决于你想要什么。
您可能想看看Dask或Graphlab
- http://dask.pydata.org/en/latest/
- https://turi.com/products/create/
它们类似于pandas,但是处理大规模数据(使用out- core数据框架)。pandas的问题是所有数据都必须装入内存。
这两个框架都可以与scikit learn一起使用。您可以加载22 GB的数据到Dask或SFrame,然后与sklearn一起使用。
我发现您选择使用Python而不是R进行统计分析是很有趣的,但是,我将首先将我的数据转换为可以处理如此大的数据集的格式。python h5py包非常适合这种存储——允许非常快速地访问您的数据。你需要将数据分成合理大小的块,比如100万个元素块,例如20列x 50,000行,将每个块写入H5文件。接下来,您需要考虑您正在运行的是哪种模型——您还没有真正指定。
事实是,你可能不得不为模型和机器学习交叉验证编写算法,因为数据很大。首先编写一个算法来总结数据,这样你就知道你在看什么了。然后,一旦您决定要运行哪种模型,您将需要考虑交叉验证将是什么。在数据集的每个块中放入一个"列",表示每行属于哪个验证集。您可以选择将每个块标记为特定的验证集。
接下来,您将需要编写一个map reduce样式算法,以便在验证子集上运行您的模型。另一种方法是简单地在每个验证集的每个块上运行模型,并对结果求平均值(考虑这种方法的理论有效性)。
考虑使用spark,或R和rhdf5或类似的东西。我没有提供任何代码,因为这是一个项目,而不仅仅是一个简单的编码问题。