ConvergenceWarning은 모델이 주어진 max_iter(최대 반복 횟수) 내에서 수렴하지 못했을 때 발생하는 경고다.
모델이 손실 함수(loss function)를 충분히 최소화하지 못한 경우를 의미하는데,
아래와 같은 방법들로 문제를 해결해볼 수 있음.
- max_iter 값 늘려보기
- 정규화 강도(C)를 추가해 과적합을 방지하기
- 데이터가 표준화(스케일링)되었는지 확인하기
- 수렴 문제가 있는 solver는 제외하고 실험하기
max_iter 값을 100에서 300, 500, 또는 1000으로 늘려보자.
반복 횟수를 증가시키면 모델이 수렴할 가능성이 높아짐
수정 파라미터:
pythonparams = {
'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],
'max_iter': [100, 300, 500, 1000] # max_iter 값을 점진적으로 늘림
}
grid_lor = GridSearchCV(model_lor2, param_grid=params, scoring='accuracy', cv=5)
grid_lor.fit(X_train, y_train)
print('최고의 하이퍼 파라미터:', grid_lor.best_params_)
print('최고의 정확도:', round(grid_lor.best_score_, 3))
Logistic Regression 모델이 과적합(overfitting) 때문에 수렴하지 않을 가능성도 있음. 이 경우엔 정규화 강도(C)를 추가해서 완화할 수 있다.
수정 예시:
params = {
'solver': ['newton-cg', 'lbfgs', 'liblinear'],
'max_iter': [100, 300, 500],
'C': [0.01, 0.1, 1, 10, 100] # 정규화 강도
}
grid_lor = GridSearchCV(LogisticRegression(), param_grid=params, scoring='accuracy', cv=5)
grid_lor.fit(X_train, y_train)
print('최고의 하이퍼 파라미터:', grid_lor.best_params_)
print('최고의 정확도:', round(grid_lor.best_score_, 3))
Age_mm_sc, Fare_sd_sc 등 특징(feature)들이 이미 표준화된 상태인지 확인해보자.
Logistic Regression의 일부 solver(saga, sag)는 데이터가 스케일링되지 않은 경우 수렴하기 어렵다.
만약 스케일링이 되어 있지 않다면, 아래와 같이 표준화를 해보자.
코드 예시:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # 특징 스케일링
solver 중 일부(sag, saga)는 특히 데이터셋이 작거나 스케일링이 적절하지 않은 경우 수렴 문제가 발생할 수 있다.
newton-cg, lbfgs, liblinear 중심으로 학습을 진행해보자.
코드 예시:
params = {
'solver': ['newton-cg', 'lbfgs', 'liblinear'],
'max_iter': [100, 300, 500]
}
grid_lor = GridSearchCV(LogisticRegression(), param_grid=params, scoring='accuracy', cv=5)
grid_lor.fit(X_train, y_train)
print('최고의 하이퍼 파라미터:', grid_lor.best_params_)
print('최고의 정확도:', round(grid_lor.best_score_, 3))