기출 8회 작업형 2 질문
데이터 전처리 과정에서
train= train.drop('customerID', axis=1)
test = test.drop('customerID', axis=1)
target=train.pop('TotalCharges')
train = pd.get_dummies(train)
test = pd.get_dummies(test)
이렇게 customerID를 drop하는 처리 진행 후 인코딩을 해서 학습 평가 까지는 잘 진행이 되는데, 예측단계(pred=rf.predict(test))에서 아래와같은value에러가 뜹니다.
ValueError: The feature names should match those that were passed during fit. Feature names unseen at fit time: - customerID_CUST0001
이런 경우는 무조건 train과 test를 하나로 묶어서 원핫인코딩을 진행해야하나요? train, test 각각 개별로 진행하면 안되는 떄의 기준이 궁금합니다.
답변 2
0
에러 원인은 train에는 CUST0001 값이 있지만 test에는 없고
원핫인코딩은 카테고리를 모두 컬럼으로 만듭니다.
예를 들어 과일 종류 100가지가 있다고 한다면 인코딩 후엔 모두 컬럼으로 만들어 버리죠!
데이터 수 만큼 모두 유니크한 값이라면 숫자면 그냥 둬도 되지만 문자면 삭제를 권장합니다.
에러가 나는 경우
train과 test의 카테고리 종류가 다를 때
특히 train에만 있는 값이 test에 없으면 문제가 됨
→ train에서는 그 값의 원핫 컬럼이 생겼기 때문에 모델이 그 컬럼을 기대함
→ test에는 해당 컬럼이 없어 오류 발생
에러가 안 나는 경우
train과 test의 카테고리 종류가 완전히 일치할 때
예: 과일 종류가 “사과, 포도, 바나나"로 train과 test 모두 같다면 문제 없음
유
0
안녕하세요, 인프런 AI 인턴입니다. 고라니님의 질문에 답변 드리겠습니다.
이번 질문에서는 원핫 인코딩 시 발생할 수 있는 차원 또는 열 불일치 문제와 관련된 내용입니다. 주어진 코드에서 customerID를 제거했지만 여전히 예측 시의 에러가 발생하는 상황은 train과 test의 컬럼 차이 때문입니다.
문제의 원인
Train과 Test의 원핫 인코딩 차이: train과 test 데이터셋 각각에 대해 독립적으로 원핫 인코딩을 진행하면, 특정 범주가 train에만 있고 test에는 없거나 그 반대일 수 있습니다. 이런 경우 서로 다른 컬럼 수로 인해 모델이 예측 시 데이터가 맞지 않아 에러가 발생할 수 있습니다.
교집합 범주의 불일치: 원핫 인코딩 후 train과 test에 존재하는 범주의 수가 다를 수 있으며, 이에 따라 원핫 인코딩 후의 컬럼 수가 다르게 됩니다.
해결책 및 권장 방법
- 데이터 병합 후 원핫 인코딩: train과 test를 하나로 결합한 뒤 원핫 인코딩을 진행하고, 다시 나눠 사용하는 방법이 안전합니다. 이렇게 하면 인코딩 후로 feature 컬럼의 불일치 문제를 방지할 수 있습니다.
# 데이터 병합
df_all = pd.concat([train, test], axis=0)
# 원핫 인코딩
df_all_encoded = pd.get_dummies(df_all)
# 데이터 분리
train_encoded = df_all_encoded[:len(train)]
test_encoded = df_all_encoded[len(train):]
이렇게 하면 train과 test 모두 동일한 컬럼을 가지게 되어 학습과 예측에 문제가 없어집니다.
참고 자료
유사한 문제와 해결책에 대한 정보는 아래 링크를 참고하시면 도움이 될 것입니다:
- 데이터 병합 후 인코딩 문제 해결
고라니님께 도움이 되었기를 바라며, 추가적으로 궁금한 사항 있으시면 언제든지 질문해 주세요. 곧 지식공유자께서도 답변해 주실 것입니다. 현재는 베타 기능으로 답변의 완벽성을 확신할 수 없는 점에 대해 양해 부탁드립니다. 🙏
감사합니다.
수강 연장가능여부 문의드립니다!
0
11
1
수강기간 연장 문의드립니다!
0
19
1
최빈값
0
16
2
수강 가이드라인
0
16
2
수강 연장 가능 여부 문의
0
36
2
강의 구매했는데 교재 필수일까요
0
24
2
수강기간 연장 가부 문의드립니다.
0
24
2
수강기간 연장이 가능한지 양해를 구하며 문의를 드립니다.
0
28
2
작업형2 모의문제2에서 drop이랑 인코딩
0
38
3
인코딩을 다 꼭 해봐야하는지
0
43
2
안녕하세요? 강사님 질문있습니다.(인코딩관련)
0
58
2
이진분류에서 양성 클래스가 0일 때 평가 방법
0
46
2
원핫인코딩 전 train과 test 병합여부
0
51
2
수강기간 연장
0
69
2
29강 작업2형의 이상치 처리
0
67
2
수강기간 연장 문의드립니다!
0
65
2
9월에 실기출제기준 개정내역에 신설된부분
0
56
1
작업형2 모의문제2 결과값 관련 문의드립니다.
0
67
2
12회차 시험 실패 후 13회 도전 예정입니다.
0
57
1
random_state 값
0
73
2
강의 연장 문의 드립니다.
0
68
2
강의 연장 문의
0
61
2
오징어게임
0
71
1
object 컬럼이 여러 개인 경우 인코딩 전처리 방법
1
51
2





