ML를 위해 코드를 작성하던 중 eli5 라이브러리가 필요하여
pip install eli5
를 진행하여 eli5 라이브러리를 설치했습니다.
from eli5.sklearn import PermutationImportance
import eli5
이후 위와 같이 간단학세 eli5 라이브러리를 import 하고 나면 아래와 같은 에러가 뜹니다.
ImportError: cannot import name 'if_delegate_has_method' from 'sklearn.utils.metaestimators'
위에 대한 에러 해결은 아래 깃허브 자료에서 자세한 내용 확인하실 수 있습니다.
https://github.com/manuel-calzolari/sklearn-genetic/commit/12ee9b2e591ec379793bcff1966095b43dac10c6
자세한 방법은 다음과 같습니다.
우선 본인의 가상환경 위치에서 아래 주소로 들어갑니다.
/home/users/anaconda3/envs/[가상환경 이름]/lib/python3.10/site-packages/eli5/sklearn/
아래 주소에서 permutation_importance.py 파일에 들어갑니다.
해당 파일에서 아래 내용을 전부 수정합니다.
# 수정 전
from sklearn.utils.metaestimators import if_delegate_has_method
# 수정 후
from sklearn.utils.metaestimators import available_if
# 수정 전
# 수정 후 (해당 내용은 통째로 파일내에 삽입해 주시면 됩니다.)
def _estimator_has(attr):
"""Check if we can delegate a method to the underlying estimator.
First, we check the first fitted estimator if available, otherwise we
check the unfitted estimator.
"""
return lambda self: (
hasattr(self.estimator_, attr)
if hasattr(self, "estimator_")
else hasattr(self.estimator, attr)
)
# 수정 전
@if_delegate_has_method(delegate='estimator')
# 수정 후
@available_if(_estimator_has("score"))
# 수정 전
@if_delegate_has_method(delegate='estimator')
# 수정 후
@available_if(_estimator_has("predict"))
# 수정 전
@if_delegate_has_method(delegate='estimator')
# 수정 후
@available_if(_estimator_has("predict_proba"))
# 수정 전
@if_delegate_has_method(delegate='estimator')
# 수정 후
@available_if(_estimator_has("predict_log_proba"))
# 수정 전
@if_delegate_has_method(delegate='estimator')
# 수정 후
@available_if(_estimator_has("decision_function"))
수정된 파일 모습은 아래와 같아야 합니다.
이렇게 수정하고 난 이후에는 에러가 나타나지 않는 것을 확인하실 수 있습니다.