Ji *_*ark 13 memory classification machine-learning pandas scikit-learn
如何使用scikit-learn在大型csv数据(~75MB)上训练模型而不会遇到内存问题?
我正在使用IPython笔记本作为编程环境,并使用pandas + sklearn软件包来分析来自kaggle的数字识别器教程的数据.
KNeighborsClassifier 用于预测.
问题:
使用read_csv函数加载大型数据集时发生"MemoryError".为了暂时绕过这个问题,我必须重新启动内核,然后read_csv函数成功加载文件,但是当我再次运行相同的单元格时会发生同样的错误.
当read_csv函数成功加载文件后,在对其进行更改后dataframe,我可以将功能和标签传递给KNeighborsClassifier的fit()函数.此时,发生类似的内存错误.
我尝试了以下方法:
以块的形式迭代CSV文件,并相应地拟合数据,但问题是每次对于一大块数据都会覆盖预测模型.
您认为如何成功训练我的模型而不会遇到内存问题,我怎么办?
ogr*_*sel 11
注意:当您使用pandas加载数据时,它将创建一个DataFrame对象,其中每列具有所有行的同类数据类型,但是2列可以具有不同的数据类型(例如,整数,日期,字符串).
当您将DataFrame实例传递给scikit-learn模型时,它将首先分配具有dtype np.float32或np.float64的同类2D numpy数组(取决于模型的实现).此时,您将在内存中拥有2个数据集副本.
为避免这种情况,您可以编写/重用CSV解析器,该解析器直接分配scikit-learn模型所期望的内部格式/ dtype中的数据.您可以尝试numpy.loadtxt(例如,查看参数的docstring).
此外,如果您的数据非常稀疏(许多零值),最好使用scipy.sparse数据结构和scikit-learn模型来处理这种输入格式(请查看文档字符串以了解).但是,CSV格式本身并不适合稀疏数据,我不确定是否存在直接的CSV-to- scipy.sparseparser.
编辑:供参考KNearestNeighborsClassifer分配临时距离数组,其形状(n_samples_predict, n_samples_train)只(n_samples_predict, n_neighbors)在需要时非常浪费.可以在此处跟踪此问题:
https://github.com/scikit-learn/scikit-learn/issues/325
| 归档时间: |
|
| 查看次数: |
7931 次 |
| 最近记录: |