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

reverq님의 프로필 이미지
reverq

작성한 질문수

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

피처 엔지니어링

피처 엔지니어링 원핫인코딩 Train/Test 컬럼 불일치

해결된 질문

작성

·

44

·

수정됨

0

범주형 변수에 get.dummies를 이용하여 원핫인코딩 하는 작업 중 질문이 있습니다.

train 데이터셋과 test 데이터셋의 컬럼수가

99개와 95개로 다릅니다.

(다른 이유는 train 데이터셋과 test 데이터셋의 컬럼 중에 관측치가 다른 항목이 있기 때문이라고 하셨는데요,

그런 이유라면 다른 것이 정상인가요?)

 

그런데 영상에서는 100개로 나옵니다,,

강의 100개 vs 99개 컬럼 갯수가 다른 이유는 무엇일까요?

 

아래는 코드와 출력값 첨부드립니다.

# 원핫 인코딩
n_train, n_test, c_train, c_test = get_nc_data() # 데이터 새로 불러오기

c_train = pd.get_dummies(c_train[cols])
c_test = pd.get_dummies(c_test[cols])
display(c_train.head())
display(c_test.head())
print(c_train.shape)
print(c_test.shape)

 

image.png

 

답변 2

0

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

 

노트북에 있는 99개, 95개가 정상입니다.

영상 촬영이후 데이터의 변화가 있어서 차이가 있네요! 이부분 개선토록 하겠습니다. 감사합니다.

혼란드려 죄송해요!

 

0

안녕하세요, 인프런 AI 인턴입니다.

reverq 님의 질문에 답변 드리겠습니다.

Train/Test 컬럼 불일치 문제 해결

train과 test 데이터셋의 원핫인코딩 결과로 생성된 컬럼 수가 서로 다를 때는 주로 두 데이터셋 간의 범주 값 차이로 인해 발생합니다. 이는 test 데이터셋에 존재하지 않거나 train 데이터셋에 없던 일부 범주값들이 있기 때문입니다. 이 문제를 해결하기 위해 참고할 수 있는 몇 가지 방법은 다음과 같습니다:

  1. 데이터 통합 후 분리: 원핫인코딩 이전에 train과 test 데이터셋을 통합한 후, 인코딩을 수행한 다음 다시 분리합니다. 이 방법은 두 데이터셋에서 동일한 범주 값들이 생성되도록 합니다.

    # 통합 후 인코딩
    combined = pd.concat([c_train, c_test], axis=0)
    combined_encoded = pd.get_dummies(combined)
    
    # 다시 분리
    c_train_encoded = combined_encoded.iloc[:len(c_train), :]
    c_test_encoded = combined_encoded.iloc[len(c_train):, :]
    
  2. 공통 Column 유지: train과 test에서 공통적으로 존재하는 컬럼만 남기고 나머지를 제거합니다.

    c_train, c_test = c_train.align(c_test, join='inner', axis=1)
    

두 방법 모두 train과 test 데이터셋에서 동일한 컬럼을 사용할 수 있도록 하여 모델이 일관된 입력을 받을 수 있게 합니다.

관련 질문 및 참고 URL

이번 설명이 도움이 되었기를 바랍니다. 원핫인코딩 작업 시 데이터의 특성 변화가 모델링 결과에 영향을 줄 수 있으니, 정확한 컬럼 조정 후에 작업을 진행하시길 권장드립니다.

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

reverq님의 프로필 이미지
reverq

작성한 질문수

질문하기