강의

멘토링

로드맵

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

Studry님의 프로필 이미지
Studry

작성한 질문수

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

당신의 열정을 응원합니다.

작업형2 train, test의 범주가 다를때

해결된 질문

작성

·

55

·

수정됨

0

안녕하세요.

시나공 빅분기 p.338 노트북 가격 예측에 대한 문제를 풀다가 궁금한 점이 있어서 질문드립니다.

train, test의 범주가 다를때 concat으로 데이터를 합쳐서 get_dummies를 적용하여 원핫 인코딩을 하게 되는데,

혹시 concat으로 데이터를 합쳐서 LabelEncoder를 적용한 후 동일하게 나누면 안 되나요?

합친 데이터에 fit()을 적용시키고 결과를 도출했을 시 값이 더 좋게 나오는 것처럼 보여지는데 책에 기술되어있지 않은 이유는 문제가 있기 때문인건가요?

 

  • 사용한 코드

cols = train.select_dtypes(include='O').columns
total = pd.concat([train,test])
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for col in cols:
  total[col] = le.fit_transform(total[col])
train = total[:train_n]
test = total[train_n:]

 

 

답변 2

1

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

  1. 카테고리가 다를 경우 레이블 인코딩도 동일하게 합쳤다가 나누면 됩니다 🙂

  2. 코드양을 줄이려고 모든 케이스를 보여주고 있지는 않고 있어요 :)

화이팅:)

0

안녕하세요, 인프런 AI 인턴입니다. Suryang Ha님께서 질문하신 범주형 데이터의 인코딩 방법에 대해 답변 드리겠습니다.

범주형 데이터 인코딩 방법

범주형 데이터를 숫자로 변환하는 방법으로 주로 두 가지가 있습니다: 원핫 인코딩(One-Hot Encoding)라벨 인코딩(Label Encoding). 각각의 방법은 다음과 같이 사용됩니다:

  1. 원핫 인코딩: 각 범주를 독립적인 이진 벡터로 변환하는 방법입니다. 범주 개수가 많을 때 데이터의 차원이 급격히 증가할 수 있지만, 데이터의 범주 정보가 명확히 유지됩니다. 범주끼리의 순서나 크기가 없는 경우에 적합합니다.

  2. 라벨 인코딩: 범주를 정수로 변환하여 인코딩하는 방법입니다. 간단하고 빠르지만, 범주가 숫자로 변환되면서 낮은 값과 높은 값간에 크기가 생길 수 있기 때문에, 트리 기반 모델이 아닌 머신러닝 모델에서는 잘못 해석될 수 있습니다.

데이터 병합 후 인코딩

이 경우, train과 test 데이터를 concat으로 합쳐서 get_dummies 를 사용할 때와 LabelEncoder를 사용할 때의 차이를 보셨는데:

  • LabelEncoder를 사용하여 병합 후 인코딩한 경우: 모든 범주를 같은 기준으로 인코딩하여 일관성을 가질 수 있습니다. 다만, 라벨 인코딩은 범주에 숫자를 부여하므로, 모델에 따라서는 잘못 해석되어 오히려 예측 성능이 저하될 수 있습니다. 이러한 문제 때문에 일반적으로는 과거 데이터로만 학습하는 모델에 사용하기 부적합한 경우가 많습니다.

  • get_dummies를 사용한 원핫 인코딩: concat 이후, 원핫 인코딩을 수행하여 각 범주의 독립성을 유지합니다. 이렇게 하면 범주가 다를 경우에도 별개의 컬럼으로 분리되므로 해당 컬럼에 대해 모델이 잘못된 해석을 할 우려가 없습니다. 일반적으로 추천되는 방식입니다.

결론

라벨 인코딩 방식이 특정 상황에서 더 나아 보일 수 있지만, 모델 타입데이터 특성에 따라 반드시 최선은 아닙니다. 따라서, 노트북의 문제에서는 범주형 데이터의 독립적인 처리가 필요한 경우가 많아 원핫 인코딩이 주로 사용됩니다.

관련하여 유사한 상황을 다룬 많은 질문들에서도 원핫 인코딩의 중요성을 강조하고 있습니다. 유사한 사례와 답변은 아래에서 참고하실 수 있습니다:

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

Studry님의 프로필 이미지
Studry

작성한 질문수

질문하기