원 핫 인코딩

IT 위키

원 핫 인코딩(One-hot encoding)은 범주형(categorical) 데이터를 머신 러닝 알고리즘에서 사용할 수 있도록 수치형 데이터로 변환하는 기법 중 하나이다. 각 범주를 이진 벡터의 고유한 위치에 1로 표시하고, 나머지는 0으로 처리하여 범주 간의 순서 또는 크기 의미를 제거한다.

1 개요[편집 | 원본 편집]

범주형 데이터는 대부분 문자열로 표현되며, 모델 학습에 직접 사용할 수 없다. 이를 해결하기 위해 원 핫 인코딩을 적용하면 각 범주는 서로 독립적인 이진 변수로 변환되므로, 범주 간의 잘못된 거리 정보를 피할 수 있다.

  • 예: '사과', '바나나', '포도' 세 가지 범주가 있을 때
    • 사과 → [1, 0, 0]
    • 바나나 → [0, 1, 0]
    • 포도 → [0, 0, 1]

2 특징[편집 | 원본 편집]

  • 범주 수만큼 차원이 증가
  • 범주 간 순서나 우선순위가 포함되지 않음
  • 희소 행렬(sparse matrix)을 생성함

3 구현 예시[편집 | 원본 편집]

3.1 pandas를 사용한 예시[편집 | 원본 편집]

import pandas as pd

df = pd.DataFrame({'과일': ['사과', '바나나', '사과', '포도']})
encoded = pd.get_dummies(df['과일'])
print(encoded)

3.2 scikit-learn을 사용한 예시[편집 | 원본 편집]

from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder(sparse=False)
X = [['사과'], ['바나나'], ['사과'], ['포도']]
encoded = encoder.fit_transform(X)
print(encoded)

4 장점[편집 | 원본 편집]

  • 범주형 데이터를 정량적으로 표현 가능
  • 범주 간 불필요한 순서를 부여하지 않아 모델의 오해를 방지
  • 대부분의 머신 러닝 모델에서 효율적으로 사용됨

5 단점[편집 | 원본 편집]

  • 범주의 수가 많을 경우 차원이 급격히 증가 (차원의 저주)
  • 희소 행렬로 인해 메모리 비효율 발생 가능
  • 테스트 데이터에 훈련 데이터에 없던 범주가 등장하면 에러 발생 가능

6 변형 기법[편집 | 원본 편집]

  • Label Encoding – 범주를 정수값으로 변환하나, 순서가 부여되어 잘못된 해석 가능
  • Binary Encoding – 차원 수를 줄이기 위해 각 범주를 2진수로 인코딩
  • Target Encoding – 범주의 통계값(예: 평균)을 대신 사용

7 같이 보기[편집 | 원본 편집]

8 참고 문헌[편집 | 원본 편집]