honey_pot

[백업] scikit-learn GridSearchCV ConvergenceWarning 끄기 본문

기타

[백업] scikit-learn GridSearchCV ConvergenceWarning 끄기

_tera_ 2023. 3. 29. 16:49

scikit-learn GridSearchCV ConvergenceWarning 끄기

 

 
먼저 아래는 일반적인 해결법들
 
1. ignore_warnings

from sklearn.exceptions import ConvergenceWarning
from sklearn.utils.testing import ignore_warnings
 
@ignore_warnings(category=ConvergenceWarning)
def ~(~):
 
모듈 앞에서 위와 같이 사용
 
2. filterwarnings, simplefilter
 
import warnings
from sklearn.exceptions import ConvergenceWarning
 
with warnings.catch_warnings():
warnings.filterwarnings('ignore', 'Solver terminated early.*') #1
warnings.filterwarnings('ignore', category=ConvergenceWarning) #2
 
ConvergenceWarning이 발생하는 위치(보통 fit 함수 호출)에서 #1 또는 #2로 사용
 
3. 환경변수 설정
 
import sklearn.exceptions
 
os.environ["PYTHONPATH"] = os.path.dirname(sklearn.exceptions.__file__)
os.environ["PYTHONWARNINGS"] = "ignore::exceptions.ConvergenceWarning:sklearn.svm[.*]"
 
PYTHONWARNINGS에 들어가는 필터 포맷은 action:message:category:module:line 형태
 
4. ConvergenceWarning

from sklearn.exceptions import ConvergenceWarning
 
ConvergenceWarning('ignore')
 
혹시나 했는데 역시나...
 
 
 
 
위의 방법들은 GridSearchCV의 n_jobs 파라미터를 1이 아닌 값으로 사용할 경우에 효과 없음
학습이 여러 개의 쓰레드로 나눠져서 수행되면서 분기된 새로운 쓰레드에는 ignore 설정이 적용되지 않는 것이 아닐까하는 추측
 
아래는 결국 찾은 해결법
 
 
1. simplefilter, 환경변수
 
if not sys.warnoptions:
warnings.simplefilter("ignore") #1
os.environ["PYTHONWARNINGS"] = "ignore" #2

warnings.filterwarnings('ignore', 'Solver terminated early.*') #3
warnings.filterwarnings('ignore', category=ConvergenceWarning) #4
 
모듈의 시작부에 정의해야함
#1, #2는 모든 warning 차단
#3, #4는 max_iter로 인한 ConvergenceWarning 차단
위에서 안된 이유는 with ~ 부분 때문인듯함
 

'기타' 카테고리의 다른 글

Streamlit 신기하다  (0) 2023.06.20
M1 Ventura + Wacom PTH-651 타블렛 연결  (0) 2023.04.13
scikit-learn UserWarning ignore 하기  (0) 2023.03.29
MLOPS FLASK 실습  (0) 2023.02.06
VirtualBox 6.1.26 + Ubuntu 20.4.5 LTS + 도커 설치  (0) 2023.02.01
Comments