타이타닉 데이터를 이용해 데이터 분석과 머신 러닝을 연습하고 있습니다. 그 중에서 로지스틱 회귀(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
경고가 발생했습니다. 이 경고는 로지스틱 회귀 모델이 최적의 결과에 도달하기 전에 학습이 중단되었음을 나타냅니다. 일반적으로 이런 경고는 모델이 충분히 수렴하지 않았을 때 발생하는데, 이는 주로 반복 횟수 부족이나 데이터의 스케일링 문제 때문이라고 적혀 있습니다. 또한, 기본적으로 LogisticRegression에서 사용된 solver인 lbfgs 대신 다른 solver를 고려해볼 것을 이야기하고 있습니다.
이러한 경고는 모델의 예측 성능에 영향을 줄 수 있으므로, 해결하는 것이 중요합니다. 다음 섹션에서는 이 문제를 해결하기 위해 취한 조치와 그 결과를 살펴보겠습니다.
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
값을 조정한 후, 모델의 성능을 다시 평가하였습니다. 결과는 다음과 같았습니다:
이러한 결과는 max_iter
값을 조정하기 전과 비교했을 때, 성능 면에서 큰 차이가 없었지만, 중요한 것은 모델이 수렴 경고 없이 안정적으로 학습되었다는 점입니다.
solver
매개변수의 역할로지스틱 회귀 모델의 solver
매개변수는 최적화 문제를 해결하기 위해 사용되는 알고리즘을 결정합니다. 처음 ConvergenceWarning
경고에서 확인할 수 있었듯, 기본적으로 사용되는 'lbfgs' 알고리즘은 대부분의 경우 잘 작동하지만, 특정 데이터셋에서는 다른 solver
가 더 효과적일 수 있습니다.
이번 단계에서는 'liblinear' 솔버를 사용해보았습니다. 'liblinear'는 주로 작은 데이터셋에 효과적이며, L1 정규화와 L2 정규화를 모두 지원합니다.
lr_clf = LogisticRegression(max_iter=1000, solver='liblinear')
lr_clf.fit(X_train, y_train)
'solver'를 'liblinear'로 변경한 후, 모델의 성능을 다시 평가하였습니다. 결과는 다음과 같았습니다:
이러한 결과는 solver
를 'liblinear'로 변경함으로써 모델의 정확도와 정밀도가 개선되었음을 보여줍니다. 특히 정밀도의 상당한 향상은 모델이 예측한 결과의 신뢰도가 증가했음을 의미합니다.
로지스틱 회귀 모델의 max_iter
와 solver
매개변수를 조정함으로써 ConvergenceWarning
경고를 해결하고 모델의 성능을 향상시킬 수 있었습니다. 이 과정은 데이터 분석과 머신 러닝 모델을 구축할 때 매개변수 튜닝이 얼마나 중요한지를 보여줍니다.
max_iter
매개변수를 조정하여 모델이 충분히 학습되도록 하여 수렴 문제를 해결할 수 있었습니다.solver
를 선택하는 것이 모델의 성능에 큰 영향을 미칩니다.