python - 使用增量分类器 sklearn 在 cPickle 之后文件大小增加和减少

标签 python scikit-learn pickle

我正在使用PassiveAggressiveRegressor增量分类器。每次我使用 partial_fit我将模型保存到 pickle 文件中。

from sklearn import linear_model
import numpy as np
import time

X = np.array(range(1000))
y = np.array([x + random.random() for x in X])
X = X.reshape(1000,1)

model = linear_model.PassiveAggressiveRegressor()
model.partial_fit(X, y)
cPickle.dump(model, open('model.pkl', 'wb'))


for i in range(0,10):
    time.sleep(1)
    model = cPickle.load(open('model.pkl', 'rb'))
    model.partial_fit(X, y)
    cPickle.dump(model, open('model.pkl', 'wb'))
<小时/>

我不明白的是为什么文件 model.pkl 的大小会改变。有时它' s 大小变为 889 字节,然后降至 886 字节。这正常吗?它在做自己的事情吗?或者我的代码有问题?

最佳答案

这可以通过以下事实来解释:原始 pickle 使用了其他协议(protocol)。

例如,尝试将 protocol=2 指定为 pickle.dump 的关键字参数,然后再次测试。因此,请尝试始终指定相同的协议(protocol)。

一般来说,二进制 pickle 的大小应该小得多。

目前有 3 种不同的协议(protocol)可用于 pickle 。

  1. 协议(protocol)版本 0 是原始 ASCII 协议(protocol),向后兼容早期版本的 Python。
  2. 协议(protocol)版本 1 是旧的二进制格式,也与早期版本的 Python 兼容。
  3. 协议(protocol)版本 2 是在 Python 2.3 中引入的。它提供了更有效的新型类的pickle。

关于python - 使用增量分类器 sklearn 在 cPickle 之后文件大小增加和减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45000460/

相关文章:

python - 值错误 : Dimension mismatch

python - 在 python 中将 namedtuple 写入和读取文件

python - pickle 模块不适用于这个简单的代码

Python:我嵌套了不起作用的循环,我不知道为什么

python - Flask 应用程序单元测试断言错误

python - tf.data.Dataset 可馈送迭代器,用于训练和推理

python - Pytest:删除由测试函数创建的文件

python - 我如何在 Django 中定义 3 个以上模型之间的多对多关系?

python - joblib 与 pickle 的不同用例是什么?

python - 如何使用 TfIdfVectorizer 使用 SciKitLearn 对文档进行分类?