Scikit-learn: Importfehler beim Laden eines gebeizten Modells aus Pipeline

Erstellt am 27. Feb. 2020  ·  3Kommentare  ·  Quelle: scikit-learn/scikit-learn

Beschreibe den Fehler

Das Picken eines RandomForestClassifiers, der aus einer Sklearn-Pipeline gezogen wurde, scheint beim Laden in ein anderes Notebook zu einem ModuleNotFoundError zu führen. Das fehlerhafte Modul existiert, kann aber nicht gefunden werden: sklearn.ensemble._forest .

Schritte/Code zum Reproduzieren

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

In einem anderen Notizbuch:

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

erwartete Ergebnisse

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)

Tatsächliche Ergebnisse

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

Versionen

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: Beschreibung korrigieren

Question

Alle 3 Kommentare

Scheint nicht in der Lage zu sein, von sklearn.ensemble._forest importieren zu können. Ist das beabsichtigt?

Könnten Sie use mitteilen, welche Version von scikit-learn Sie zum Beizen der Pipeline verwendet haben und welche Version Sie versuchen zu entbeizen. Ich gehe davon aus, dass Sie versuchen, in 0,21,3 zu entbeizen, während Sie in 0,22,1 beizen
Sie können dann einfach aktualisieren. Beachten Sie jedoch, dass wir dies nicht als Fehler betrachten, da wir das Beizen/Entbeizen in verschiedenen scikit-learn-Versionen nicht unterstützen

Genau das war das Thema. Mir war nicht bewusst, dass ich das neue Notebook in einem anderen Kernel gestartet hatte. Vielen Dank für die prompte Antwort.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen