[ML] 데이터 전처리 | 범주형 데이터 인코딩

·2025년 1월 20일

ML

목록 보기
7/18

인코딩은 사전적으로 어떤 정보를 정해진 규칙에 따라 변환하는 것을 의미. 우리가 만든 머신러닝 모델은 숫자를 기반으로 학습하기 떄문에 반드시 인코딩 과정이 필요.

범주형 데이터

레이블 인코딩 Label Encoding

  • 문자열으로 정의된 범주 값을 고유한 숫자로 할당
    • 1등급 -> 0
    • 2등급 -> 1
    • 3등급 -> 2

특징

  • 장점: 모델이 처리하기 쉬운 수치형으로 데이터 변환
  • 단점: 실제로는 그렇지 않지만 순서 간의 크기에 의미가 부여되어 잘못 해석될 수 있음

실습

  • sklearn.preprocessing.LabelEncoder
  • 메소드
    • fit: 데이터 학습
    • transform: 정수형 데이터로 변환
    • fit_transform: fit과 transform을 연결하여 한번에 실행
    • inverse_transform : 인코딩된 데이터를 원래 문자열로 변환
  • 속성
    • classes_: 인코더가 학습한 클래스(범주)
  • 범주형 데이터 학습시키기
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
le = LabelEncoder()

le.fit(titaninc_df[['Sex']])
  • 클래스 확인 및 인코딩
le.classes_
# array(['female', 'male'], dtype=object)

titaninc_df['Sex_le'] = le.transform(titaninc_df[['Sex']])
titaninc_df.head(3)

원핫 인코딩 One-Hot Encoding

  • 각 범주를 이진 형식으로 변환하는 기법
    • 빨강 -> [1, 0, 0]
    • 파랑 -> [0, 1, 0]
    • 초록 -> [0, 0, 1]

특징

  • 장점: 각 범주가 독립적으로 표현되어 순서갖 중요도를 잘못 학습하는 것을 방지. 명목형 데이터에 적합
  • 단점: 범주의 개수가 많을 경우 차원이 크게 증가, 모델의 복잡도 증가, 과적합 유발

실습

  • pd.get_dummies
  • sklearn.preprocessing.OneHotEncoder
    • 메소드(LabelEncoder와 동일)
    • categories_: 인코더가 학습한 클래스(범주)
    • get_feature_names_out(): 학습한 클래스 이름(리스트)
  • 학습 및 카테고리 확인
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
le = LabelEncoder()
oe = OneHotEncoder()

oe.fit(titaninc_df[['Embarked']])

od.categories_
# [array(['C', 'Q', 'S', nan], dtype=object)]
  • 데이터프레임으로 변환
embarked_csr = oe.transform(titaninc_df[['Embarked']])
embarked_csr_df = pd.DataFrame(embarked_csr.toarray(), columns = oe.get_feature_names_out())
embarked_csr_df.head(3)

  • 기존 데이터셋에 합치기
pd.concat([titaninc_df, embarked_csr_df],axis = 1).head(3)

profile
To Dare is To Do

0개의 댓글