Scikit-learn: Erro de importação ao carregar um modelo decapado retirado do pipeline

Criado em 27 fev. 2020  ·  3Comentários  ·  Fonte: scikit-learn/scikit-learn

Descreva o bug

Retirar um RandomForestClassifier retirado de um pipeline sklearn parece resultar em ModuleNotFoundError ao carregar em outro bloco de notas. O módulo incorreto existe, mas não pode ser encontrado: sklearn.ensemble._forest .

Etapas / código para reproduzir

from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import make_pipeline
import pickle
import numpy as np


pipeline = make_pipeline(
    # Other steps in pipeline as well
    RandomForestClassifier(),
)

# Create some fake data
X_train = np.array([[2,8,5],[4,7,2],[1,9,4]])
y_train = np.array([26, 29, 18])
# Train the model
pipeline.fit(X_train, y_train)

# Pickle the model
model = pipeline.named_steps['randomforestclassifier']
outfile = open("model.pkl", "wb")
pickle.dump(model, outfile)
outfile.close()

Em outro caderno:

from sklearn.ensemble import RandomForestClassifier
import pickle


# Attempt to load the pickled model in another file / notebook:
infile = open("model.pkl", "rb")
model = pickle.load(infile)
infile.close()

# It's lonely over here
model

resultados esperados

RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,
                       criterion='gini', max_depth=None, max_features='auto',
                       max_leaf_nodes=None, max_samples=None,
                       min_impurity_decrease=0.0, min_impurity_split=None,
                       min_samples_leaf=1, min_samples_split=2,
                       min_weight_fraction_leaf=0.0, n_estimators=100,
                       n_jobs=None, oob_score=False, random_state=None,
                       verbose=0, warm_start=False)

Resultados reais

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-20-c8d1783e8b58> in <module>
      5 # Attempt to load the pickled model in another file / notebook:
      6 infile = open("model.pkl", "rb")
----> 7 model = pickle.load(infile)
      8 infile.close()

ModuleNotFoundError: No module named 'sklearn.ensemble._forest'

Versões

System:
    python: 3.7.4 (default, Oct  9 2019, 16:55:50)  [GCC 7.4.0]
executable: /usr/local/bin/python3.7
   machine: Linux-4.15.0-88-generic-x86_64-with-debian-buster-sid

Python deps:
       pip: 19.3
setuptools: 40.8.0
   sklearn: 0.21.3
     numpy: 1.17.2
     scipy: 1.3.1
    Cython: None
    pandas: 0.25.1

EDIT: Corrigir descrição

Question

Todos 3 comentários

Não parece ser capaz de importar de sklearn.ensemble._forest . Isso é intencional?

Você poderia dizer qual versão do scikit-learn usou para decifrar o pipeline e qual versão você está tentando desfazer. Eu suponho que você está tentando decapagem em 0.21.3 enquanto decapagem em 0.22.1
Você pode então apenas atualizar. No entanto, esteja ciente de que não o consideramos um bug porque não oferecemos suporte para decapagem / retirada de picles em diferentes versões do scikit-learn

Esse era exatamente o problema. Não percebi que havia começado o novo notebook em um kernel diferente. Muito obrigado pela resposta rápida.

Esta página foi útil?
0 / 5 - 0 avaliações