원 핫 인코딩
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 참고 문헌[편집 | 원본 편집]
- Géron, A. (2019). Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. O'Reilly Media.
- scikit-learn 공식 문서: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
- pandas 공식 문서: https://pandas.pydata.org/docs/reference/api/pandas.get_dummies.html