ConvergenceWarning: The max_iter was reached which means the coef_ did not converge warnings

Hyunjun Kim·2024년 11월 21일
0

Error

목록 보기
3/4

ConvergenceWarning는 모델이 주어진 max_iter(최대 반복 횟수) 내에서 수렴하지 못했을 때 발생하는 경고입니다. 이는 모델이 손실 함수(loss function)를 충분히 최소화하지 못한 경우를 의미합니다. 아래 방법으로 문제를 해결할 수 있습니다

  1. max_iter 값을 늘리기
    max_iter 값을 100에서 300, 500, 또는 1000으로 늘려보세요. 반복 횟수를 증가시키면 모델이 수렴할 가능성이 높아집니다.

수정된 파라미터:

    '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))
  1. 정규화 강도(C) 추가
    Logistic Regression 모델이 과적합(overfitting) 때문에 수렴하지 않을 가능성도 있습니다. 정규화 강도(C)를 추가하여 이 문제를 완화할 수 있습니다. 작은 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))
  1. 데이터 스케일링 확인하기
    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)  # 특징 스케일링
  1. 수렴 문제를 일으키는 Solver 제외
    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))

요약
max_iter 값을 늘려보세요.
정규화 강도(C)를 추가해 과적합을 방지하세요.
데이터가 표준화(스케일링)되었는지 확인하세요.
수렴 문제가 있는 solver는 제외하고 실험해 보세요.

profile
Data Analytics Engineer 가 되

0개의 댓글