ConvergenceWarning는 모델이 주어진 max_iter(최대 반복 횟수) 내에서 수렴하지 못했을 때 발생하는 경고입니다. 이는 모델이 손실 함수(loss function)를 충분히 최소화하지 못한 경우를 의미합니다. 아래 방법으로 문제를 해결할 수 있습니다
수정된 파라미터:
'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))
수정된 예시:
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))
만약 스케일링이 되어 있지 않다면, 다음 코드를 사용해 데이터를 표준화하세요:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # 특징 스케일링
예시:
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는 제외하고 실험해 보세요.