web-dev-qa-db-fra.com

ImportError: impossible d'importer le nom 'joblib' depuis 'sklearn.externals'

J'essaie de charger mon modèle enregistré à partir de s3 à l'aide de joblib

import pandas as pd 
import numpy as np
import json
import subprocess
import sqlalchemy
from sklearn.externals import joblib

ENV = 'dev'
model_d2v = load_d2v('model_d2v_version_002', ENV)

def load_d2v(fname, env):
    model_name = fname
    if env == 'dev':
        try: 
            model=joblib.load(model_name)
        except:
            s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
            path = s3_base_path+'/'+model_name
            command = "aws s3 cp {} {}".format(path,model_name).split()
            print('loading...'+model_name)
            subprocess.call(command)
            model=joblib.load(model_name)
    else:
        s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
        path = s3_base_path+'/'+model_name
        command = "aws s3 cp {} {}".format(path,model_name).split()
        print('loading...'+model_name)
        subprocess.call(command)
        model=joblib.load(model_name)
    return model

Mais je faisais face à cette erreur:

    from sklearn.externals import joblib
ImportError: cannot import name 'joblib' from 'sklearn.externals' (C:\Users\prane\AppData\Local\Programs\Python\Python37\lib\site-packages\sklearn\externals\__init__.py)

Ensuite, j'ai essayé d'installer joblib directement en faisant

import joblib

mais ça m'a donné cette erreur

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 8, in load_d2v_from_s3
  File "/home/ec2-user/.local/lib/python3.7/site-packages/joblib/numpy_pickle.py", line 585, in load
    obj = _unpickle(fobj, filename, mmap_mode)
  File "/home/ec2-user/.local/lib/python3.7/site-packages/joblib/numpy_pickle.py", line 504, in _unpickle
    obj = unpickler.load()
  File "/usr/lib64/python3.7/pickle.py", line 1088, in load
    dispatch[key[0]](self)
  File "/usr/lib64/python3.7/pickle.py", line 1376, in load_global
    klass = self.find_class(module, name)
  File "/usr/lib64/python3.7/pickle.py", line 1426, in find_class
    __import__(module, level=0)
ModuleNotFoundError: No module named 'sklearn.externals.joblib'

Pouvez-vous me dire comment résoudre ce problème? Merci d'avance

5
Praneeth Sai

Peut-être que votre code est obsolète. Pour tous ceux qui souhaitent utiliser fetch_mldata dans un projet manuscrit, vous devriez fetch_openml au lieu. ( lien )

Dans l'ancienne version de sklearn:

from sklearn.externals import joblib
mnist = fetch_mldata('MNIST original')

Dans sklearn 0.23 (version stable):

import sklearn.externals
import joblib
    
dataset = datasets.fetch_openml("mnist_784")

features = np.array(dataset.data, 'int16')
labels = np.array(dataset.target, 'int')

Pour plus d'informations sur l'abandon de fetch_mldata voir scikit-learn doc

0