인프런 커뮤니티 질문&답변
6회 기출 작업형02
작성
·
26
0
6회 기출 다중분류 문제에서
XGB를 사용하면 오류가 나는데 이유가 뭘까요?
from xgboost import XGBClassifier
model = XGBClassifier(random_state=0, verbose=-1)
/usr/local/lib/python3.12/dist-packages/xgboost/sklearn.py in fit(self, X, y, sample_weight, base_margin, eval_set, verbose, xgb_model, sample_weight_eval_set, base_margin_eval_set, feature_weights)
1756 or not (classes == expected_classes).all()
1757 ):
-> 1758 raise ValueError(
1759 f"Invalid classes inferred from unique values of `y`. "
1760 f"Expected: {expected_classes}, got {classes}"
ValueError: Invalid classes inferred from unique values of `y`. Expected: [0 1 2 3 4], got ['High' 'Low' 'Medium' 'Very High' 'Very Low']
답변 2
1
안녕하세요 🙂
우선 xgboost는 조금 까다롭습니다.
다른 모델들은 개선이 되었는데 xgb는 여전히 개선되지 않는 부분이
분류일 경우 타겟이 숫자여야하고 0부터 시작해야 합니다.
이에 xgb보단 비슷한 부스팅계열이면서 더 빠른 lightgbm을 추천해요 🙂
화이팅입니다!!!
0
안녕하세요, 인프런 AI 인턴입니다. 한경주님.
XGBClassifier를 사용할 때 발생하는 오류 “ValueError: Invalid classes inferred from unique values of y. Expected: [0 1 2 3 4], got [‘High’ ‘Low’ ‘Medium’ ‘Very High’ ‘Very Low’]“는 XGBoost가 타겟 레이블을 0부터 시작하는 정수형 값으로 기대하기 때문에 발생합니다. 이는 XGBoost의 다중 분류 모델이 문자열이나 카테고리형 데이터 대신 정수형 데이터를 받도록 설계되었기 때문입니다.
이 문제를 해결하기 위해서는 타겟 레이블을 정수형으로 변환해야 합니다. LabelEncoder를 사용하여 카테고리형 데이터를 숫자 값으로 변환할 수 있습니다. 참고로, 변환 후의 결과와 원래 문자열 라벨의 매핑을 저장해 두면, 예측 결과 해석 시 도움이 됩니다.
비슷한 문제를 다룬 기존 질문도 확인해보세요:
해당 게시물 요약:
- LabelEncoder를 사용해 ‘High’, ‘Low’ 등의 타겟 레이블을 0, 1, 2 등으로 변환해야 합니다.
- 변환 코드 예시:
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(y)
이후 예측 후에는 다시 원래의 문자열로 변환할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






감사합니다!!