내일배움캠프

[내일배움캠프] TIL 32일차 26.02.19(목)

nom_de_plume 2026. 2. 19. 21:05

원-핫 인코딩

  • 범주형 데이터를 컴퓨터가 이해할 수 있는 숫자(벡터)로 변환하는 기법
  • 단순히 숫자로 바꾸는 '라벨 인코딩'과 달리, 각 카테고리를 독립적인 차원으로 만들고 해당되는 인덱스에만 1, 나머지는 0 부여
  • 필요한 이유
    • 머신러닝 알고리즘은 기본적으로 수치 데이터를 계산!
      • 문제점: '사과=1, 바나나=2, 딸기=3'으로 인코딩하면, 모델은 '딸기(3)가 사과(1)보다 크다'거나 '사과와 바나나를 더하면 딸기다'라는 잘못된 관계성 학습할 수 있다.
      • 해결: 원-핫 인코딩은 모든 항목을 독립적인 축으로 분리하여 이러한 서열이나 거리감 제거
  • 장점:
    • 범주형 데이터 간의 관계가 없는 경우(성별, 지역 등) 왜곡 없이 학습 가능
  • 단점:
    • 차원의 저주: 카테고리가 너무 많아지면 변수가 기하급수적으로 늘어나고 메모리 낭비 심해짐

 

구현방법

① 판다스의 get_dummies

import pandas as pd
data = {'과일': ['사과', '바나나', '딸기', '사과']}
df = pd.DataFrame(data)

# 원-핫 인코딩 적용
encoded_df = pd.get_dummies(df['과일'])

 

② Scikit-learn의 OneHotEncoder

  • 실제 머신러닝 파이프라인에 포함시키거나, 학습 데이터와 테스트 데이터의 카테고리 일관성을 유지해야 할 때 권장
from sklearn.preprocessing import OneHotEncoder
import numpy as np

items = np.array(['사과', '바나나', '딸기', '사과']).reshape(-1, 1)
oh_encoder = OneHotEncoder()
oh_labels = oh_encoder.fit_transform(items)