解决scikitlearn OneVsRest RandomForests的缓慢取消拾取

2024-04-25 20:03:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个应用程序中加载了非常大的python对象——它们是序列化的scikit学习分类器及其相关词汇表。在

分类器足够大(大约1-100mbs),因此将它们加载到内存中是一项非常重要的任务。实际读取速度很快,但取消拾取需要很长时间,对于4MB分类器来说大约需要10秒。在

有没有比序列化/反序列化对象更快的方法cPickle.dumps/cPickle.负载?在

附加信息:

分类器是10个元素的一对一随机森林的实例。分类人员接受了大约1000个样本、大约500个特征和52个可能的标签的培训。min_density参数设置为0。在


的C配置文件输出cPickle.load公司以下内容:

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000  300.168  300.168 <ipython-input-4-9b8a128f290d>:1(loader)
        1    0.899    0.899  301.067  301.067 <string>:1(<module>)
    51380  288.151    0.006  288.151    0.006 __init__.py:93(__RandomState_ctor)
    51380    0.059    0.000    0.404    0.000 fromnumeric.py:1774(amax)
        1   11.613   11.613  300.168  300.168 {cPickle.load}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
    51380    0.344    0.000    0.344    0.000 {method 'max' of 'numpy.ndarray' objects}
        1    0.000    0.000    0.000    0.000 {open}

我正准备在github.com/scikit-了解这个。在


Tags: of词汇表对象内存py应用程序序列化objects
1条回答
网友
1楼 · 发布于 2024-04-25 20:03:16

你试过使用joblib选择器吗?它捆绑在sklearn包中:

>>> from sklearn.externals import joblib
>>> joblib.dump(model, '/path/to/model.pkl')
>>> model_copy = joblib.load('/path/to/model.pkl')

编辑:实际上,对于随机林,使用最高原生质的默认酸洗似乎更快:

^{pr2}$

Edit2:根据您的概要报告,问题似乎是伪随机数生成器实例的取消拾取。请提供您用于训练模型和数据集形状的确切python片段,并将其作为scikit learn项目github问题跟踪器的分析报告一起包含吗?在

相关问题 更多 >