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

peter park님의 프로필 이미지

작성한 질문수

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

작업형 2유형 label encoding

해결된 질문

23.11.25 11:03 작성

·

411

·

수정됨

0

작업형 2유형 라벨 인코딩 할 때

다른 교재에서는 X_train 과 X_test 데이터를 모두 fitting 시키던데

수업에서 다룬 X_train은 fit_transform 시키고 X_test는 Transform만 시키는 방식과

어떤 차이가 있는지 궁금합니다.

답변 2

2

Jason님의 프로필 이미지

2023. 11. 25. 20:43

개인적인 공부 차원에서 커뮤니티 글 보면서 학습 중인 수강생입니다.

 

train과 test 모두 fitting 시키는 건 잘 모르겠는데

fit_transform과 transform 과정에 대해 선생님이 알려주신 내역을 전달 드리면

 

Train 데이터에는 fit_transform 함수(fit와 transform을 2개 합쳐 놓음)

Test 데이터에는 transform 함수를 사용하는데,

 

fit는 Train 데이터에 있는 숫자가 아닌 범주형 변수(ex. 자동차, 기차 등)를 학습하고

자동차는 0, 기차는 1이라는 라벨을 만드는 과정이고, transform은 '자동차' 라는 문자를 숫자 '0'에 적용하는 단계라고 보시면 될 거 같습니다.

 

train 데이터에서는 범주형 변수에 대한 라벨(자동차: 0 , 기차: 1)을 이미 만들었으니 (fit 과정),

test 데이터에서는 train에서 만든 라벨을 숫자로 변환하는 과정만 필요하므로, transform만 적용한다고 보시면 됩니다.

1

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

2023. 11. 25. 22:50

Jason님이 남겨 준 댓글이 맞아요!
보통은 train데이터에서는 fit과 transform을 사용하고,
test 데이터에는 transform만 사용하여 train데이터와 동일하게 변환 작업을 합니다.

 

X_train 과 X_test 데이터를 모두 fit하는 것은 합쳐서 하는 것이 아니라 각각 했을 때
문제가 있어요! 컬럼(카테고리)의 수가 다르다면 다른 결과로 각각 인코딩 됩니다.

따라서

레이블 인코딩 시

  1. X_train은 fit_transform 시키고 X_test는 Transform만 시키는 방식

  2. 또는 합쳐서 fit_transform 방식 중에 선택해서 작업해주세요!

peter park님의 프로필 이미지
peter park
질문자

2023. 11. 26. 15:37

## train과 test 특정 범주형 컬럼의 카테고리가 다를 때

- train이 test를 포함한다면: 레이블 인코딩, 사이킷런 원핫인코딩, train+test 합쳐서 인코딩

- test가 train을 포함한다면: train+test 합쳐서 인코딩

두 범주의 카테고리를 비교하기 힘들다면 아래 방식처럼 해도 될까요?

from sklearn.preprocessing import LabelEncoder
X=pd.concat(x_train[col_cat],x_test[col_cat])

for col in col_cat:
  le=LabelEncoder()
  le.fit(X[col])
  x_train[col] = le.transform(x_train[col])
  x_test[col] = le.transform(x_test[col])

 *방금 수업 듣고 왔습니다. 수업내용에 잘 정리되어 있었네요. 감사합니다.

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

2023. 11. 26. 18:14

네, 좋은 생각이네요 💪💪💪

데이터를 분리할 필요가 없으니 저보다 더 간결하게 사용한 것 같습니다.

한 수 배웠습니다 🙇🏼‍♂️