使用joblib.load从磁盘读取xgboost模型时出现TypeError



我只是试图通过joblib读取XGBoost模型(os.path.exists(self._classifier_xgboost_path)如预期返回True):

self._xgboost_model = joblib.load(self._classifier_xgboost_path)

但是,我得到以下错误:

File "/home/iai/Desktop/barak_8/main.py", line 150, in <module>
main()
File "/home/iai/Desktop/barak_8/main.py", line 32, in main
classifier = Classifier(config=config)
File "/home/iai/Desktop/barak_8/classifiers.py", line 56, in __init__
if os.path.exists(self._classifier_xgboost_path) 
File "/home/iai/Desktop/barak_8/venv/lib/python3.6/site-packages/joblib/numpy_pickle.py", line 585, in load
obj = _unpickle(fobj, filename, mmap_mode)
File "/home/iai/Desktop/barak_8/venv/lib/python3.6/site-packages/joblib/numpy_pickle.py", line 504, in _unpickle
obj = unpickler.load()
File "/usr/lib/python3.6/pickle.py", line 1050, in load
dispatch[key[0]](self)
File "/usr/lib/python3.6/pickle.py", line 1323, in load_newobj
obj = cls.__new__(cls, *args)
TypeError: NoneType.__new__(X): X is not a type object (NoneType)

版本:

Python 3.6
xgboost 1.3.1
joblib 1.0.0

这很可能是由于缺少xgboost模型的依赖导入造成的。我今天早些时候遇到了这个问题,在我的情况下,它是由环境中缺少导入引起的。我的环境中缺少scikit-learn

其实我最近也遇到了同样的问题,我想把我的解决方案告诉别人可能会对我有帮助。

所以简单地说,问题是执行joblib.dump的代码中的scikit-learn版本高于执行joblib.load的代码中的一个使用

确实:joblib。dump设置为scikit-learn=0.24.1joblib。加载另一个scikit-learn = 0.18.2的存储库

所以你需要做的就是使用相同版本的scikit-learn(或子句版本,例如我,我只是将0.18.2升级到0.21.3,它也可以工作)

相关内容

最新更新