0

我从一位离开我公司的同事那里继承了一些代码,我注意到他编写的电子邮件打开预测器在几周内没有运行。所以,我尝试运行它。它到了这一行:

clf_predict = joblib.load(os.path.join(data_dir,'trained_random_forest.pkl'))

结果是这样的:

File "/usr/local/lib/python2.7/distpackages/sklearn/externals/joblib/numpy_pickle.py", line 425, in load
obj = unpickler.load()
File "/usr/lib/python2.7/pickle.py", line 858, in load dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 1133, in load_reduce
value = func(*args)
File "sklearn/tree/_tree.pyx", line 923, in sklearn.tree._tree.Splitter.__cinit__ (sklearn/tree/_tree.c:8329)
TypeError: __cinit__() takes exactly 5 positional arguments (4 given)

从我在文档中看到的内容来看,加载的语法对我来说是正确的。因此,我最初的理论是 scikit-learn 可能已升级并且无法读取当前的 pickle 文件(此时已经有几个月了)。但是,我不确定它是否已升级,而且我对使用 sklearn 还很陌生,所以我不知道这是否会造成问题。感谢您提供的任何指示

4

1 回答 1

0

假设它对您的同事有效,而您的问题是由于 sklearn 升级造成的。在这个 commit中引入了 Splitter init 的额外参数。您可以尝试在早期版本的 sklearn 中加载 pkl 文件并从那里获取。

于 2015-05-27T11:01:27.810 回答