본문 바로가기
AI/Machine Learning

원핫 인코딩(One-Hot Encoding)

by comflex 2025. 4. 13.
728x90
반응형

one-hot

원핫 인코딩(One-Hot Encoding)

머신러닝이나 딥러닝을 공부하다 보면 자주 접하게 되는 개념 중 하나가 원핫 인코딩(One-Hot Encoding)입니다. 데이터 전처리 단계에서 범주형 데이터를 숫자로 바꿔야 할 때 유용하게 사용되죠. 이 글에서는 원핫 인코딩이 무엇인지, 왜 필요한지, 그리고 어떻게 디코딩하는지까지 한 번에 정리해드립니다.


원핫 인코딩이란?

원핫 인코딩(One-Hot Encoding)은 범주형 데이터를 이진 벡터(binary vector)로 표현하는 방법입니다.
예를 들어, 다음과 같은 카테고리가 있다고 해봅시다:

['사과', '바나나', '포도']

이를 원핫 인코딩하면 아래와 같이 표현됩니다:

과일 원핫 벡터
사과 [1, 0, 0]
바나나 [0, 1, 0]
포도 [0, 0, 1]

즉, 하나의 값만 1이고 나머지는 0인 벡터로 표현하는 것이 특징입니다.


왜 원핫 인코딩을 사용할까?

기계는 문자열을 이해하지 못하므로, 문자열을 숫자 또는 벡터 형태로 변환해야 합니다. 예를 들어 "사과 = 1, 바나나 = 2, 포도 = 3"처럼 숫자로만 바꾸면, 기계는 이 숫자들 사이에 '순서'나 '크기'가 있다고 오해할 수 있습니다. 이럴 경우 학습에 부정적인 영향을 줄 수 있습니다.

하지만 원핫 인코딩은 모든 카테고리를 동등하게 표현해주기 때문에 이런 문제를 방지할 수 있습니다.


반응형
728x90

디코딩

원핫 인코딩된 데이터를 다시 원래의 값으로 되돌리는 작업을 디코딩이라고 합니다.
예를 들어 [0, 1, 0]이라는 벡터가 주어졌을 때, 이것이 '바나나'라는 것을 알아내는 과정이죠.

디코딩 방법은 간단합니다:

  1. 벡터에서 1이 있는 인덱스를 찾는다.
  2. 그 인덱스에 해당하는 카테고리 값을 불러온다.

파이썬 코드로 예를 들어보면 다음과 같습니다:

categories = ['사과', '바나나', '포도']
one_hot = [0, 1, 0]

index = one_hot.index(1)
decoded = categories[index]

print(decoded)  # 바나나

실무에서는 어떻게 쓰일까?

  • 텍스트 분류
  • 이미지 레이블링
  • 챗봇에서 사용자 의도 분류
  • 음성 인식에서 단어 분류

등 다양한 분야에서 원핫 인코딩은 필수적으로 활용됩니다.


주의할 점

  • 차원이 커질 수 있음: 카테고리 개수가 많아지면 벡터 차원이 커져 메모리 낭비가 발생할 수 있습니다.
  • 이런 경우에는 Label Encoding, Embedding 등의 다른 방법을 고려해볼 수 있어요.

마무리

원핫 인코딩은 범주형 데이터를 벡터로 바꾸는 매우 직관적이고 강력한 방법입니다.
디코딩 역시 간단하지만, 항상 카테고리의 순서 정보를 같이 관리해야 정확하게 역변환할 수 있어요.

728x90
반응형

'AI > Machine Learning' 카테고리의 다른 글

머신러닝에서 L1, L2 규제  (0) 2025.04.13
분류 vs 회귀 모델 평가 지표  (2) 2025.04.13
머신러닝에서의 정규화(Regularization)  (0) 2025.04.09
데이터 변환  (0) 2025.04.08
로그(log)와 지수(exp)의 관계  (1) 2025.04.08