sklearn中的模型对于大数据集如何处理? 举报 理由 举报 取消 今天用sklearn的svm.svc训练模型,fit的时候出现了MemoryError。另外在用cross_validation.cross_val_score做交叉检验的时候也出现了同样的问题。由于数据比较稀疏,改用了linearsvc,不会出现这种错误了,训练的也比较快。但是考虑到这种情况,如果数据集比较大,没办法一次读入内存或者一次训练完成的话,sklearn有没有提供分批读入并训练的方式呢?还请大神赐教。 2017年11月2日 6 条回复 2896 次浏览 Python,分析,学习,数据,数据挖掘,机器
回复 ( 6 )
有的,linearsvc,还有lr/sgd这样的模型,都可以分批训练。但是非线性svm是不可以的。
另外如果你数据集稀疏的话就应该用稀疏矩阵,这样不需要分批训练也不会超过内存,如果是非线性svm这样的模型,你应该用svd先降维,这样也不会内存不足。如果数据集完全超过了内存量级,并且你不满足于lr这样的模型的话,你只能自己去写一个
看了上面的匿名用户的回答,然后去看了sklearn的文档,解决了我的问题。
顺便写了一个博客记录增量学习的用法:使用sklearn进行增量学习
请看文档,sklearn提供这么全的文档不是为了好玩:
6. Strategies to scale computationally: bigger data
Out-of-core classification of text documents
简单来说,有partial_fit的算法都可以分批train,但你要自己写分批读入的代码,毕竟只有你自己知道你的数据是什么格式。
大量数据的是NLP吗?
说可能你不爱听的,有些东西个人电脑是搞不动的。但是你要是非要想搞,你可以有以下选择:
1.把整块数据分成batches,每次训练读取一个,训练完释放空间,然后读下一个。
2.使用稀疏矩阵以及支持稀疏矩阵的方法。
注意设置cross_val_score里的pre_dispatch。这个不调很容易MemoryError。
可以参考下文:
sklearn cross_val_score中的参数pre_dispatch-SofaSofa
建议使用支持scipy sparse matrix的算法 RF好像就可以 如果你一定要dense matrix的话 有些算法使可以使用Online learning的