Scikit-learn: Error de importación al cargar un modelo decapado extraído de Pipeline

Creado en 27 feb. 2020  ·  3Comentarios  ·  Fuente: scikit-learn/scikit-learn

Describe el error

El decapado de un RandomForestClassifier extraído de un canal de sklearn parece dar como resultado un ModuleNotFoundError cuando se carga en otro cuaderno. El módulo errante existe, pero no se puede encontrar: sklearn.ensemble._forest .

Pasos / Código para reproducir

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()

En otro cuaderno:

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 previstos

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 actuales

---------------------------------------------------------------------------
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'

Versiones

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

EDITAR: descripción de corrección

Question

Todos 3 comentarios

No parece poder importar desde sklearn.ensemble._forest . ¿Es esto intencionado?

¿Podría decir qué versión de scikit-learn usó para eliminar la tubería y qué versión está tratando de eliminar? Supongo que está tratando de despegar en 0.21.3 mientras decapa en 0.22.1
A continuación, puede actualizar. Sin embargo, tenga en cuenta que no lo consideramos un error porque no admitimos el decapado / despegado en diferentes versiones de scikit-learn.

Ese era exactamente el problema. No me di cuenta de que había iniciado el nuevo portátil en un kernel diferente. Muchas gracias por la pronta respuesta.

¿Fue útil esta página
0 / 5 - 0 calificaciones