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

SEO님의 프로필 이미지
SEO

작성한 질문수

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

6회 기출 유형(작업형2) xgboost 관련 질문있습니다!

해결된 질문

작성

·

395

·

수정됨

0

안녕하세요 다중분리를 할 때 xgboost classification을 적용하는 과정에서 문제가 생겨서 질문드립니다.

처음 데이터셋 그대로 xgboost를 쓰니까

"ValueError: Invalid classes inferred from unique values of y. Expected: [0 1 2 3 4], got ['High' 'Low' 'Medium' 'Very High' 'Very Low']" # 참고로 y는 train 데이터에서 타겟변수만 따로 pop해놓은 변수입니다.

이런 에러가 뜨더라구요, 그래서 for문을 이용해서

for i in range(len(y)):
    if y[i] =='Very Low':
        y[i] = 0
    elif y[i] =='Low':
        y[i] = 1
    elif y[i] =='Medium':
        y[i] = 2
    elif y[i] =='High':
        y[i] = 3                
    elif y[i] =='Very High':
        y[i] = 4

이렇게 바꾸니까, 모델과 pred는 돌아가긴 돌아가는데, f1_score(pred, y_val, average= 'macro')로 점수를 내는 과정에서 새로운 오류가 생겨 점수가 나타나지 않습니다..

ValueError: Classification metrics can't handle a mix of multiclass and unknown target 이라고 떴고, 이전과 비교를 해보니까

랜덤 포레스트 classifier를 돌릴 때 pred는 'Low' 'High' 'Very Low' 'Medium' 'Low' 'Low' 'Low' 'Low' 'High' 'High' ... 이런식으로 되어있는 반면

xgboost는 [1 3 0 2 1 1 1 1 3 3 3 3 0 2 1 3 3 3 3 1 2 3 1 2 0 3 3 1 1 0 0 3 0 1 4 0 4

0 3 1 4 2 2 1 2 3 0 3 1 0 3 1 3 0 0 1 1 2 0 0 4 1 4 2 3 1 2 4 4 4 3 1 0 0

0 0 4 1 0 4 0 0 3 2 0 1 2 4 3 4 0 1 1 0 1 2 3 0 0 1 3 3 0 0 4 0 2 3] 이렇게 콤마로 되어있는걸 알게되었습니다.

그래서 모델을 돌린 뒤

for i in range(len(pred)):
    if pred[i] == 0:
        pred[i] = 'Very Low'
    elif pred[i] == 1 :
        pred[i] = 'Low'
    elif pred[i] ==2:
        pred[i] = 'Medium'
    elif pred[i] ==3:
        pred[i] = 'High'               
    elif pred[i] ==4:
        pred[i] = 'Very High'

 다시 원상복구를 시켜서,

['Low', 'High', 'Very Low', 'Medium', 'Low', 'Low', 'Low', 'Low', 'High', 'High', 'High', 'High', 'Very Low', 'Medium',...] 이 형식으로 만들었고,

pred = pd.DataFrame(pred)

으로해서.. 음.. 만들었는데 여전히 되지 않습니다..

 

결론은 저런 과정을 통해.. 해결하고자 했는데 여전히 못하고있고..

  1. xgboost를 사용하려면 어떻게 해야되나요 ?

  2. 이런 과정을 거치지 않고서도 xgboost를 돌리려면 어떻게 해야하나요?

입니다.

 

감사합니다!

답변 1

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

xgboost의 경우 0,1,2,3... 로변경해야 하고 예측 결과를 다시 변환해야 하는 번거로움이 있어요

또한 워닝을 너무 자주 내기도 해서

부스팅 계열을 사용한다면 xgb보다는 lightgbm추천드립니다 (마지막 영상에 있음)

SEO님의 프로필 이미지
SEO

작성한 질문수

질문하기