【问题标题】:Python: Pickle error with SVM usagePython:使用 SVM 时出现 Pickle 错误
【发布时间】:2015-02-13 06:55:04
【问题描述】:

我正在尝试在 python 中使用 pickle 保存 SVR 模型。但是,在第一次尝试时引发了 ValueError:

ValueError: pickle protocol must be <= 2

我试图通过显式传递一个参数来解决这个错误:

s = pickle.dumps(w, open('svm.p', 'wb'), protocol=pickle.HIGHEST_PROTOCOL)

但我现在收到一个 TypeError:

TypeError: dumps() got multiple values for keyword argument 'protocol'

据我所知,我的代码与其他示例进行比较并通读文档时很好,但我无法解决此错误。只要保存的模型可以跨工作站传输,我很乐意通过另一种方法保存模型。以下是相关代码:

import pickle

w = svm.SVR(kernel='rbf', C=1e6, gamma=0.00000008, max_iter=-1, cache_size=4096)
w.fit(X, Y)

s = pickle.dumps(w, open('svm.p', 'wb'), protocol=pickle.HIGHEST_PROTOCOL)

X 和 Y 是长度为 17520 的向量,X 对于每个元素都有一个包含 6 个数据点的列表。例如。 X[0] = [0, 1, 6239.0, 6709.375, 6462.0, 6774.75] 和 Y[0] = 6391.0

【问题讨论】:

    标签: python scikit-learn svm pickle


    【解决方案1】:

    pickle.dumps 不接受 file 参数。 pickle.dump 可以。 解释器假设 open('svm.p', 'wb') 和 protocol=pickle.HIGHEST_PROTOCOL 都作为协议版本传入,基于方法定义中的参数顺序。

    使用 pickle.dump 因为它会写入 svm.p 文件。

    【讨论】:

    • 我想转储到一个文件,这样我就可以将文件传输到另一个位置(服务器),并在需要时使用转储的文件在那里运行预测脚本,而无需每次都进行训练(需要很多时间)。
    • 我想你想要pickle.dump,而不是pickle.dumps。
    • 确实,现在使用 pickle.dump 可以正常工作,我对 scikit-learn 页面上给出的示例感到困惑。非常感谢!
    • 还有一点:使用 sklearns joblib,它为此进行了优化!
    猜你喜欢
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2022-09-24
    • 1970-01-01
    相关资源
    最近更新 更多