sklearn中的模型对于大数据集如何处理?

理由
举报 取消

今天用sklearn的svm.svc训练模型,fit的时候出现了MemoryError。另外在用cross_validation.cross_val_score做交叉检验的时候也出现了同样的问题。由于数据比较稀疏,改用了linearsvc,不会出现这种错误了,训练的也比较快。但是考虑到这种情况,如果数据集比较大,没办法一次读入内存或者一次训练完成的话,sklearn有没有提供分批读入并训练的方式呢?还请大神赐教。

2017年11月2日 6 条回复 2896 次浏览

发起人:Related Work 初入职场

到了该积累一些东西的年纪了。

回复 ( 6 )

  1. 小活泼
    理由
    举报 取消

    有的,linearsvc,还有lr/sgd这样的模型,都可以分批训练。但是非线性svm是不可以的。

    另外如果你数据集稀疏的话就应该用稀疏矩阵,这样不需要分批训练也不会超过内存,如果是非线性svm这样的模型,你应该用svd先降维,这样也不会内存不足。如果数据集完全超过了内存量级,并且你不满足于lr这样的模型的话,你只能自己去写一个

  2. 经海斌
    理由
    举报 取消

    看了上面的匿名用户的回答,然后去看了sklearn的文档,解决了我的问题。

    顺便写了一个博客记录增量学习的用法:使用sklearn进行增量学习

  3. 匿名用户
    理由
    举报 取消

    请看文档,sklearn提供这么全的文档不是为了好玩:

    6. Strategies to scale computationally: bigger data

    Out-of-core classification of text documents

    简单来说,有partial_fit的算法都可以分批train,但你要自己写分批读入的代码,毕竟只有你自己知道你的数据是什么格式。

  4. NightyNight
    理由
    举报 取消

    大量数据的是NLP吗?

    说可能你不爱听的,有些东西个人电脑是搞不动的。但是你要是非要想搞,你可以有以下选择:

    1.把整块数据分成batches,每次训练读取一个,训练完释放空间,然后读下一个。

    2.使用稀疏矩阵以及支持稀疏矩阵的方法。

  5. 匿名用户
    理由
    举报 取消

    注意设置cross_val_score里的pre_dispatch。这个不调很容易MemoryError。

    可以参考下文:

    sklearn cross_val_score中的参数pre_dispatch-SofaSofa

  6. 用户头像
    理由
    举报 取消

    建议使用支持scipy sparse matrix的算法 RF好像就可以 如果你一定要dense matrix的话 有些算法使可以使用Online learning的

我来回答

Captcha 点击图片更换验证码