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

reverq님의 프로필 이미지
reverq

작성한 질문수

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

피처 엔지니어링

원핫인코딩 데이터 합치기

해결된 질문

작성

·

45

0

피처 엔지니어링 강의 중 분리한 데이터 다시 합침 부분에서 강의영상과 출력값이 달라서 질문드립니다.

 

image.png

강의화면에서는 107 컬럼, 103컬럼인데요,

 

같은 코드 결과인데 컬럼수가 15개로 나온이유가 궁금합니다.

image.png

 

답변 2

0

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

숫자가 영상에서 잘못 표기된 부분이 맞네요.

크게 달라진 원인은 이전 데이터를 그대로 사용하지 않고

n_train, n_test, c_train, c_test = get_nc_data() # 데이터 새로 불러오기

로 데이터를 새로 불러와서 그렇습니다.

 

더불어 이 셀의 목적은 데이터 합치기를 보여주는 부분으로

concat을 알려드리기 위함에요!

0

안녕하세요, 인프런 AI 인턴입니다. reverq님, 질문해 주신 내용에 대해 도움을 드리겠습니다.

피처 엔지니어링 과정에서 pd.concat() 등을 통해 데이터 세트를 합쳐 사용하는 이유는, traintest 데이터 세트에서 동일하게 One-Hot Encoding을 하기 위함입니다. One-Hot Encoding은 범주형 변수를 처리할 때 각 범주를 0과 1로 나타내는 변수로 변환합니다. 하지만 traintest 데이터 세트에 서로 다른 범주의 데이터가 있을 경우, 컬럼 수가 다른 문제가 발생할 수 있습니다.

문제 발생 원인:

  1. 범주형 변수 차이: traintest 데이터에 포함된 범주형 변수의 카테고리 수가 다를 수 있습니다. 예를 들어, train에 있는 범주가 test에 없거나 그 반대의 경우입니다.

  2. 컬럼 선택 문제: 데이터 전처리 과정에서 필요한 컬럼만 남기거나 선택되지 않은 컬럼은 포함시키지 않았을 수 있습니다.

해결 방법:

  1. 데이터 병합 후 인코딩: traintest 데이터를 먼저 pd.concat()으로 병합한 후 pd.get_dummies()를 적용하여 One-Hot Encoding을 수행합니다. 이후 다시 traintest로 나누어주는 것이 일반적입니다.
   df = pd.concat([train, test], axis=0)
   df = pd.get_dummies(df, columns=['범주형컬럼'])
   train = df.iloc[:len(train)]
   test = df.iloc[len(train):]
  1. 각 데이터의 모든 범주 고려: traintest 각각에서 One-Hot Encoding 후, 부족한 컬럼을 0으로 채우는 방법도 있습니다:
   missing_cols = set(train.columns) - set(test.columns)
   for col in missing_cols:
       test[col] = 0
   test = test[train.columns]

이와 관련하여 도움이 될 수 있는 답변 URL을 안내드립니다:

이 게시물들은 데이터 인코딩 과정에서 발생할 수 있는 문제, 특히 One-Hot Encoding과 관련된 이슈의 해결 방법을 제시하고 있습니다.

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

reverq님의 프로필 이미지
reverq

작성한 질문수

질문하기