Scikit-learn: Erreur d'importation lors du chargement d'un modèle décapé extrait de Pipeline

Créé le 27 févr. 2020  ·  3Commentaires  ·  Source: scikit-learn/scikit-learn

Décrivez le bogue

Le décapage d'un RandomForestClassifier extrait d'un pipeline sklearn semble entraîner un ModuleNotFoundError lors du chargement dans un autre bloc-notes. Le module errant existe, mais est introuvable : sklearn.ensemble._forest .

Étapes/Code à reproduire

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

Dans un autre cahier :

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

Résultats attendus

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)

Résultats actuels

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

Versions

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 : Correction de la description

Question

Tous les 3 commentaires

Ne semble pas pouvoir importer à partir de sklearn.ensemble._forest . Est-ce prévu ?

Pourriez-vous dire quelle version de scikit-learn avez-vous utilisée pour décaper le pipeline et quelle version essayez-vous de décaper. Je suppose que vous essayez de décaper en 0.21.3 tout en décapant en 0.22.1
Vous pouvez alors simplement mettre à jour. Cependant, sachez que nous ne le considérons pas comme un bogue car nous ne prenons pas en charge le décapage/décapage sur différentes versions de scikit-learn

C'était exactement le problème. Je n'avais pas réalisé que j'avais démarré le nouveau bloc-notes dans un noyau différent. Merci beaucoup pour la réponse rapide.

Cette page vous a été utile?
0 / 5 - 0 notes