가져오기 오류: 'sklearn.externals'에서 'joblib' 이름을 가져올 수 없습니다.
저장된 모델을 로드하려고 합니다.s3
사용.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
하지만 다음과 같은 오류가 발생합니다.
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)
그런 다음 설치를 시도했습니다.joblib
직접 함으로써
import joblib
하지만 그것은 나에게 이 오류를 주었습니다.
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'
이것을 어떻게 해결해야 하는지 알려주실 수 있나요?
직접 사용해야 합니다.
import joblib
대신에
from sklearn.externals import joblib
기존 피클 저장 파일처럼 보입니다.model_d2v_version_002
) 비표준 위치에서 기준 모듈을 인코딩합니다. – ajoblib
에 있는sklearn.externals.joblib
최고 수준이라기 보다는.
해류scikit-learn
문서는 최상위 수준에 대해서만 설명합니다.joblib
예를 들어 3.4.1 지속성 예제 - 그러나 나는 다른 사람의 이전 호에서 권장되지 않는 경고에 대한 언급을 봅니다.scikit-learn
버전 0.21 이전 버전 정보scikit.external.joblib
변형 제거:
Python37\lib\site-packages\sklearn\externals\joblib_init_.py:15: 사용 중지 경고: sklearn.externals.joblib는 0.21에서 사용되지 않으며 0.23에서 제거됩니다.이 기능은 다음과 같이 설치할 수 있는 joblib에서 직접 가져오십시오. pip install joblib.절임 모델을 로드할 때 이 경고가 발생하면 skikit-learn 0.21+로 해당 모델을 다시 직렬화해야 할 수 있습니다.
'권장'은 미래의 릴리스에서 중단될 가능성이 높기 때문에 의존하기에 바람직하지 않은 것으로 표시하는 것을 의미합니다(항상 그렇지는 않지만 권장되는 새로운 방법으로 동일한 작업을 수행할 수 있습니다).
당신이 의심되는군요.model_d2v_version_002
의 이전 버전에서 파일이 저장되었습니다.scikit-learn
그리고 당신은 지금 사용하고 있습니다.scikit-learn
(일명)sklearn
) 버전 0.23+가 완전히 제거되었습니다.sklearn.external.joblib
변화.따라서 파일을 현재 환경에 직접 또는 쉽게 로드할 수 없습니다.
하지만, 그에 따라DeprecationWarning
당신은 아마도 일시적으로 오래된 것을 사용할 수 있습니다.scikit-learn
이전 방식으로 파일을 한 번 로드한 다음 현재 방식으로 다시 저장합니다.경고 정보를 고려할 때, 이것은 아마도 필요할 것입니다.scikit-learn
버전 0.21.x 또는 0.22.x. 하지만 정확히 어떤 버전인지 알고 있다면model_d2v_version_002
파일이 저장되었습니다. 사용해 보겠습니다.단계는 대략 다음과 같습니다.
이전 사용자와 함께 임시 작업 환경 만들기(또는 현재 작업 환경 롤백)
sklearn
다음과 같은 것을 가져옵니다.
import sklearn.external.joblib as extjoblib
import joblib
extjoblib.load()
이전 파일을 계획대로 사용할 수 있지만, 즉시 다시 사용할 수 있습니다.joblib.dump()
최상위 레벨을 사용하는 파일joblib
(만약을 위해 이전 파일을 보관하기 위해 고유한 이름을 사용하는 것이 좋습니다.)으로 이동/할 수 , 유일하게 사용할 수 있습니다.
import joblib
레벨)을합니다.joblib.load()
코드 또는 저장된 피클 파일에서 'sklearn.external.joblib'에 대한 참조가 더 이상 없습니다.
가올수다니있을 가져올 수 .joblib
하고 종성으로사직용접여하를 사용하여 import joblib
,
설명서.
코드가 오래된 것일 수 있습니다.사용을 목표로 하는 모든 사용자에게fetch_mldata
손으로 쓴 숫자 프로젝트에서, 당신은 해야 합니다.fetch_openml
대신.(링크)
이전 버전의 sklearn:
from sklearn.externals import joblib
mnist = fetch_mldata('MNIST original')
Insklearn 0.23(안정적 릴리스):
import sklearn.externals
import joblib
dataset = datasets.fetch_openml("mnist_784")
features = np.array(dataset.data, 'int16')
labels = np.array(dataset.target, 'int')
사용 중지에 대한 자세한 내용은 다음과 같습니다.fetch_mldata
스크킷 학습 문서 참조
아래 답변 중 저에게 맞는 것은 없습니다. 약간의 변경 사항이 있으면 이 수정 사항은 괜찮았습니다.
import sklearn.externals as extjoblib
import joblib
이 오류에 대해, 저는 다음을 직접 사용해야 했고 그것은 매력적으로 작동했습니다.
import joblib
간단하죠.
joblib에 대한 실행/호출이 자신의 프로그램이 아닌 다른 .py 프로그램 내에 있는 경우(그런 경우에도 joblib을 설치한 경우에도 코드를 변경하지 않는 한 호출 파이썬 프로그램 내에서 오류가 발생합니다.) 하드 링크를 만들려고 했습니다.
(윈도우즈 버전)
Python > 가져오기 joblib
그러면 sklearn 경로 내부 >......\Lib\site-packages\sklearn\externals
mklink /J . /joblib ...\Lib\site-packages\joblib
(Python juptyter 노트북에 있는 ! 또는 %, !mklink...... 또는 %mklink......를 사용하여 위의 문제를 해결하거나 python OS 명령을 사용할 수 있습니다.)
이렇게 하면 "외부" 폴더 내에 작업lib의 가상 폴더를 효과적으로 생성할 수 있습니다.
비고: 물론 버전 복원력을 높이기 위해서는 코드가 사전에 sklearn 버전이 >= 0.23인지 다시 확인해야 합니다.
이는 sklearn 버전을 변경하는 대신 사용할 수 있습니다.
오류가 발생할 때:
sklearn.externals import joblib에서 이전 버전을 사용하지 않습니다.
새 버전의 경우 다음을 수행합니다.
- 콘다 설치 - canaconda sikit-learn ("아나콘다 프롬"을 사용하여 설치)
- joblib 가져오기(Jupter Notebook)
저도 같은 문제가 있었습니다.
제가 미처 깨닫지 못한 것은 joblib이 이미 설치되어 있다는 것입니다!
그래서 당신이 해야 할 일은 대체하는 것입니다.
from sklearn.externals import joblib
와 함께
import joblib
이상입니다
오랜 시간 조사한 결과, 컴퓨터 설정을 고려했을 때 데이터 세트를 다운로드하려면 SSL 인증서가 필요했기 때문입니다.
언급URL : https://stackoverflow.com/questions/61893719/importerror-cannot-import-name-joblib-from-sklearn-externals
'sourcetip' 카테고리의 다른 글
Xcode 변수 (0) | 2023.05.18 |
---|---|
WPF 텍스트 상자의 수직 정렬 (0) | 2023.05.18 |
Xcode로 코드를 포맷하는 방법은? (0) | 2023.05.18 |
오른쪽에서 왼쪽으로? (0) | 2023.05.18 |
Node.js 모범 사례 예외 처리 (0) | 2023.05.18 |