로지스틱 회귀 모델 최적화: 타이타닉 데이터를 이용한 Convergence Warning 해결과 성능 향상

소환인·2023년 12월 22일
0

스터디노트

목록 보기
42/48

들어가며

로지스틱 회귀 모델의 경고 해결과 성능 향상

타이타닉 데이터를 이용해 데이터 분석과 머신 러닝을 연습하고 있습니다. 그 중에서 로지스틱 회귀(Logistic Regression) 모델은 분류 문제에 사용되는 알고리즘입니다. 이번 포스트에서는 제가 로지스틱 회귀 모델을 사용하는 과정에서 경험한 ConvergenceWarning 경고를 해결하고, solver 매개변수를 조정하여 모델의 성능을 향상시키는 과정을 정리하여 포스트 하도록 하겠습니다.

초기 설정과 문제 발생

타이타닉 데이터셋을 이용한 로지스틱 회귀 모델 구축

타이타닉 데이터셋은 승객의 생존 여부를 예측하는 문제를 제공합니다. 제가 진행한 첫 번째 단계는 Scikit-learn의 LogisticRegression 클래스를 사용하여 기본 설정으로 모델을 구축하는 것이었습니다. 아래는 이를 위해 작성한 코드입니다:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 데이터 로드 및 전처리
titanic_df = pd.read_csv('../data/titanic/train.csv')
X = titanic_df.drop('Survived', axis=1)
y = titanic_df['Survived']

# 훈련 및 테스트 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=11)

# 로지스틱 회귀 모델 생성 및 학습
lr_clf = LogisticRegression()
lr_clf.fit(X_train, y_train)
pred = lr_clf.predict(X_test)

Confusion Matrix
[[104 14][ 13 48]]
Accuracy : 0.8492 Precision : 0.7742 Recall : 0.7869
c:\Users\mase8\anaconda3\envs\ds_study\lib\site-packages\sklearn\linear_model_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.

Increase the number of iterations (max_iter) or scale the data as shown in:
https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
n_iter_i = _check_optimize_result(


ConvergenceWarning 경고 발생

모델을 학습시키고 결과를 평가하는 과정에서 ConvergenceWarning 경고가 발생했습니다. 이 경고는 로지스틱 회귀 모델이 최적의 결과에 도달하기 전에 학습이 중단되었음을 나타냅니다. 일반적으로 이런 경고는 모델이 충분히 수렴하지 않았을 때 발생하는데, 이는 주로 반복 횟수 부족이나 데이터의 스케일링 문제 때문이라고 적혀 있습니다. 또한, 기본적으로 LogisticRegression에서 사용된 solver인 lbfgs 대신 다른 solver를 고려해볼 것을 이야기하고 있습니다.

이러한 경고는 모델의 예측 성능에 영향을 줄 수 있으므로, 해결하는 것이 중요합니다. 다음 섹션에서는 이 문제를 해결하기 위해 취한 조치와 그 결과를 살펴보겠습니다.

max_iter 설정을 통한 해결

max_iter 매개변수의 중요성

ConvergenceWarning 경고를 해결하기 위한 첫 번째 단계는 max_iter 매개변수의 값을 조정하는 것이었습니다. max_iter는 로지스틱 회귀 모델이 수렴할 때까지의 최대 반복 횟수를 설정합니다. 기본값으로 설정된 반복 횟수가 충분하지 않으면, 모델은 최적화 과정을 완료하기 전에 학습을 중단합니다. 따라서 max_iter 값을 증가시키면 모델이 충분한 학습을 통해 수렴할 수 있는 기회를 제공합니다.

max_iter 값 조정

다음 코드는 max_iter 값을 1000으로 설정한 예시입니다:

lr_clf = LogisticRegression(max_iter=1000)
lr_clf.fit(X_train, y_train)

Confusion Matrix
[[104 14][ 13 48]]
Accuracy : 0.8492 Precision : 0.7742 Recall : 0.7869


이 변경 후 모델을 다시 학습시켰을 때, ConvergenceWarning 경고는 더 이상 나타나지 않았습니다. 이는 모델이 충분한 반복을 거쳐 최적화 과정을 완료할 수 있었음을 의미합니다.

결과 비교

max_iter 값을 조정한 후, 모델의 성능을 다시 평가하였습니다. 결과는 다음과 같았습니다:

  • Accuracy: 0.8492
  • Precision: 0.7742
  • Recall: 0.7869

이러한 결과는 max_iter 값을 조정하기 전과 비교했을 때, 성능 면에서 큰 차이가 없었지만, 중요한 것은 모델이 수렴 경고 없이 안정적으로 학습되었다는 점입니다.

solver 조정을 통한 성능 향상

solver 매개변수의 역할

로지스틱 회귀 모델의 solver 매개변수는 최적화 문제를 해결하기 위해 사용되는 알고리즘을 결정합니다. 처음 ConvergenceWarning 경고에서 확인할 수 있었듯, 기본적으로 사용되는 'lbfgs' 알고리즘은 대부분의 경우 잘 작동하지만, 특정 데이터셋에서는 다른 solver가 더 효과적일 수 있습니다.

'liblinear' solver 선택

이번 단계에서는 'liblinear' 솔버를 사용해보았습니다. 'liblinear'는 주로 작은 데이터셋에 효과적이며, L1 정규화와 L2 정규화를 모두 지원합니다.

lr_clf = LogisticRegression(max_iter=1000, solver='liblinear')
lr_clf.fit(X_train, y_train)

성능 개선 확인

'solver'를 'liblinear'로 변경한 후, 모델의 성능을 다시 평가하였습니다. 결과는 다음과 같았습니다:

  • Accuracy: 0.8659
  • Precision: 0.8246
  • Recall: 0.7705

이러한 결과는 solver를 'liblinear'로 변경함으로써 모델의 정확도와 정밀도가 개선되었음을 보여줍니다. 특히 정밀도의 상당한 향상은 모델이 예측한 결과의 신뢰도가 증가했음을 의미합니다.

결론 및 학습 포인트

모델 튜닝의 중요성

로지스틱 회귀 모델의 max_itersolver 매개변수를 조정함으로써 ConvergenceWarning 경고를 해결하고 모델의 성능을 향상시킬 수 있었습니다. 이 과정은 데이터 분석과 머신 러닝 모델을 구축할 때 매개변수 튜닝이 얼마나 중요한지를 보여줍니다.

핵심 학습 포인트

  1. 수렴 문제 해결: max_iter 매개변수를 조정하여 모델이 충분히 학습되도록 하여 수렴 문제를 해결할 수 있었습니다.
  2. 적절한 solver 선택: 데이터셋의 크기와 특성에 따라 적절한 solver를 선택하는 것이 모델의 성능에 큰 영향을 미칩니다.
  3. 성능 평가: 매개변수 변경 후 모델의 성능을 재평가하여 개선 사항을 명확히 확인하고 이해할 수 있었습니다.
profile
돌고돌아

0개의 댓글