【发布时间】:2012-07-27 07:30:13
【问题描述】:
如何使用 scikit-learn 在大型 csv 数据(约 75MB)上训练模型而不会遇到内存问题?
我使用 IPython notebook 作为编程环境,使用 pandas+sklearn 包来分析来自 kaggle 数字识别器教程的数据。
数据在webpage,链接到my code,这里是error message:
KNeighborsClassifier 用于预测。
问题:
使用 read_csv 加载大型数据集时发生“MemoryError” 功能。要暂时绕过这个问题,我必须重新启动 内核,然后 read_csv 函数成功加载文件,但是 当我再次运行同一个单元格时,也会出现同样的错误。
read_csv 函数成功加载文件后,在对dataframe 进行更改后,我可以将特征和标签传递给 KNeighborsClassifier 的 fit() 函数。此时出现类似的内存错误。
我尝试了以下方法:
逐块迭代CSV文件,并相应地拟合数据,但问题是每次数据块都会覆盖预测模型。
您认为我可以做些什么来成功训练我的模型而不会遇到内存问题?
【问题讨论】:
-
您的代码 + 数据在我的笔记本电脑上运行良好。它需要大约 1.2 GB 的内存。你的系统有多少内存?
-
使用 loadtxt 让它工作。即使没有发生内存错误,在算法上仅运行约 75mb 的数据也会占用超过 1GB 的内存......我不确定我的代码是否做错了什么。 (pastie.org/4354911) (ipython 笔记本)。如果只是算法需要这么长时间,你如何在算法上加载千兆字节的数据而不需要这么长时间来创建模型?
-
您可以使用可以增量训练的算法,从而一次只处理(小)部分数据。如果 scikit-learn 中的估算器实现了
partial_fit方法,它就能够做到这一点。
标签: memory pandas machine-learning scikit-learn classification