강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

한경주님의 프로필 이미지
한경주

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

6회 기출유형 (작업형2)

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)

이후 예측 후에는 다시 원래의 문자열로 변환할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

한경주님의 프로필 이미지
한경주

작성한 질문수

질문하기