加载训练有素的 scikit-learn/imblearn 管道模型时出现问题

问题描述

我使用 Scikit-learn 的 imblearn 和 RandomForestClassifer 构建和训练了 imblearn.pipeline Pipeline

使用 joblib.dump('model.joblib') 保存模型

但是,当我尝试加载模型时,它会引发错误

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-26-d3ee277020d2> in <module>
----> 1 model = joblib.load('model.joblib')

~/SageMaker/custom-miniconda/miniconda/envs/datascience/lib/python3.7/site-packages/joblib/numpy_pickle.py in load(filename,mmap_mode)
    583                     return load_compatibility(fobj)
    584 
--> 585                 obj = _unpickle(fobj,filename,mmap_mode)
    586     return obj

~/SageMaker/custom-miniconda/miniconda/envs/datascience/lib/python3.7/site-packages/joblib/numpy_pickle.py in _unpickle(fobj,mmap_mode)
    502     obj = None
    503     try:
--> 504         obj = unpickler.load()
    505         if unpickler.compat_mode:
    506             warnings.warn("The file '%s' has been generated with a "

~/SageMaker/custom-miniconda/miniconda/envs/datascience/lib/python3.7/pickle.py in load(self)
   1086                     raise EOFError
   1087                 assert isinstance(key,bytes_types)
-> 1088                 dispatch[key[0]](self)
   1089         except _Stop as stopinst:
   1090             return stopinst.value

~/SageMaker/custom-miniconda/miniconda/envs/datascience/lib/python3.7/pickle.py in load_global(self)
   1374         module = self.readline()[:-1].decode("utf-8")
   1375         name = self.readline()[:-1].decode("utf-8")
-> 1376         klass = self.find_class(module,name)
   1377         self.append(klass)
   1378     dispatch[GLOBAL[0]] = load_global

~/SageMaker/custom-miniconda/miniconda/envs/datascience/lib/python3.7/pickle.py in find_class(self,module,name)
   1424             elif module in _compat_pickle.IMPORT_MAPPING:
   1425                 module = _compat_pickle.IMPORT_MAPPING[module]
-> 1426         __import__(module,level=0)
   1427         if self.proto >= 4:
   1428             return _getattribute(sys.modules[module],name)[0]

ModuleNotFoundError: No module named 'imblearn.over_sampling._smote.base'; 'imblearn.over_sampling._smote' is not a package

我确实在 conda 环境中安装了 imblearn。不知道为什么没有找到 imblearn。任何提示都会有所帮助。

解决方法

使用

python-m pip install package name 

在系统上全局安装它,也许它可以帮助