본문 바로가기

Big Data

[logistic regression] Warning: Maximum number of iterations has been exceeded.

로지스틱 회귀분석을 이용해서 분류(binary classification)를 하기 위해 모델을 검토하는 과정에서 다음과 같은 에러가 발생하였다.

 

로지스틱 회귀분석 모델 적용시 에러 발생

 

Maximum number of iterations has been exceeded. (최대 반복 횟수를 초과했다.)

 

모델이 제대로 수렴되지 않은 듯 했다.

원인을 알 수 없어 구글링으로 열심히 뒤져본 결과, 캐글의 한 게시글을 찾을 수 있었다.

www.kaggle.com/anon7r/predicting-back-pain-logistic-regression-python

 

Predicting Back Pain - Logistic Regression, Python

Explore and run machine learning code with Kaggle Notebooks | Using data from Lower Back Pain Symptoms Dataset

www.kaggle.com

이 게시자는 로지스틱 회귀분석을 이용해 back pain을 예측하였는데, 나와 같은 에러를 겪고 이를 해결한 내용을 담고 있었다.

그가 말하는 에러 발생 원인은 다음과 같다.

 

모델이 수렴되지 않는 이유는 일부 변수가 서로 높은 상관 관계를 가지고 있어 이로 인해 상관(correlation)/공분산(covariance) 행렬(matrix)이 단수가 되기 때문일 있다(또는 ) 다른 (또는 ) 선형 조합으로 표현할 있는 경우 행렬이 단수가 있다.

사실 읽고도 이게 무슨 말인가? 싶었는데 어찌됐든 일부 설명변수끼리 높은 상관 관계를 가지면 에러가 발생한다는 것 같다.

 

또 다른 원인 분석은 없는지 찾아보았는데, 스택오버플로우에서도 같은 에러가 발생했다는 게시글을 발견했다.

stackoverflow.com/questions/32926299/how-to-fix-statsmodel-warning-maximum-no-of-iterations-has-exceeded

 

게시글의 답글 중에는 이러한 내용이 있었다.

 

Check for the levels of all variables. It might be possible that one amongst them would have almost 99% of one category. Hence making it difficult to converge. I resolved it by removing that variable from my dataset.

변수 중에 99%가 한 개의 범주를 가지는 것이 있으면 수렴이 어려워질 수 있으며, 해당 변수를 삭제하면 해결이 된다는 내용이었다.

 

나는 다시 데이터를 살펴보았고, 설명변수 socialBool charSessionA 값들이 대부분 0 치우쳐져 있으며,  변수의 높은 상관 관계로 인해 수렴이 어려운 것으로 판단하여 제거 다시 모델을 실행하였다.

 

Optimization terminated successfully.

 

그 결과, 모델이 잘 수렴되었다! 👍

 

(정확한 에러 발생 원인과 알맞은 해결책을 아시는 분이 계시다면, 댓글로 설명해주시면 감사하겠습니다!)