머신러닝 과제를 하던중 하이퍼파라미터 튜닝을 시도해보다가 사고가 났다.
전처리와 스케일링을 다끝낸후 모델을 학습하고자 했는데
그리드서치를 사용해서 여러값들중 최적을 찾고싶었다
from sklearn.model_selection import GridSearchCV
grid_xgb = xgb.XGBRegressor(random_state=42)
param_grid_xgb = {
'n_estimators': [50, 100, 150],
'learning_rate': [0.01, 0.1, 0.2],
'max_depth': [3, 5, 7],
'subsample': [0.8, 1.0],
'colsample_bytree': [0.8, 1.0],
'gamma': [0, 0.1, 0.2]
}
grid_search_xgb = GridSearchCV(estimator=grid_xgb,
param_grid=param_grid_xgb,
scoring='neg_mean_squared_error',
cv=5,
n_jobs=1,
verbose=2)
grid_search_xgb.fit(X_train, y_train)
best_model_xgb = grid_search_xgb.best_estimator_
y_pred_xgb_grid = best_model_xgb.predict(X_test)
그러나 모델을 학습시키려는데
AttributeError: 'super' object has no attribute '__sklearn_tags__'
이런에러가 나오게되었다
코드네비게이터로 들어가서 보는데 분명 태그가있지만 자꾸 찾을수 없다고 한다
그래서 조금 찾아보니 사이킷런에 따른 호환문제라고 했다
내가사용하던건 scikit-learn 1.6.0 버전이었다
이게 최신버전이었는데 나와같은 오류를 겪은사람이 많은걸 볼 수 있었다.
답변을 보면
이런식으로 버전을 낮추면 해결된다는게 대부분 의견이었다
그래서 나도 버전을 하나한 낮춰가고 성공한사람의 버전도 따라가봤지만 똑같은 에러가 나오게 되었다.
그래서 이방법이 아닌가?? 하면서 튜터님과 해결법을 찾아나가보는데
버전을 낮추면 해결이된다는 말은, 최신버전이 현재 무슨문제가 있는것이 아닌가? 라는 합리적 의심을 들게한다
그래서 깃허브에서 scikit-learn 을 찾아들어가 issue 를 살펴보는데
최신버전이라그런지 3일전에 나와같은 에러를 겪은사람이 있었다
나와같이 XGBoost 와 버전호환때문에 문제가 생긴것이었고 다음 릴리즈부터는 해결이 될것같았다.
그래서 버전문제가 맞는것 같다 느끼고 다운그레이드를 시키면 해결이 되지 않을까?? 란 생각에 확신이 점점 들게되었다.
그러나 하나하나 낮춰도 같은에러가 나오게되었다
그런데 이때 버전을 낮출때
- 그냥 낮추거나 높이거나 한경우
- 다 삭제하고 새로 설치한 경우
등 여러가지를 다 섞어가며 실행이가능한 버전을 찾아보고자 했는데 이과정에서 무언가 문제가 생길수도 있다 란 생각을하여 아예 새로운 폴더와 가상환경을 만들어 해봤더니
잘 돌아가는걸 볼 수 있었다. 히히
느낀점
라이브러리의 버전이 최신버전이라고 능사가 아니다.
실제로 보수적인 분위기인 금융권 등 에서는 최신버전을 사용하지않고 안정화된 버전을 사용한다고 한다
그리고 내가 경험한것처럼 호환성 문제가 있을수 있고
새로운 버그나 안정성에 문제가 생길 가능성이 높아지게 된다
그래서 문제가 생길경우 최신버전에 관한 문서나, 커뮤니티에 정보가 부족할 수 있다.
이를 방지하기 위해 릴리즈 노트를 확인하여 새로운 버전의 변경사항을 파악하고 현재 내코드에 미칠 영향을 파악하는 눈을 키워야 한다.
여태까지 라이브러리의 편함에 취해 생각없이 설치해서 쓰고 했다.
각 버전에서의 특징과 장단점 들을 확인도 안하고 막 사용하기만 하였는데
추후에 팀프로젝트를 진행하게되면 모두 버전을 맞추고 이런 호환성문제가 빈번하게 발생한다하니 지금부터 버전파악하고, 호환성문제를 해결하고, 이슈를보는눈을 키우는 연습을 해야겠다.
'개발지식' 카테고리의 다른 글
코드 컨벤션 (Code Convention) (4) | 2024.11.07 |
---|---|
판교사투리 (5) | 2024.11.07 |