단일 활성화
단일 활성화
개요
단일 활성화(One-Hot Encoding)는 범주형 데이터(categorical data)를 기계학습 모델이 처리할 수 있도록 수치형 형태로 변환하는 대적인 데이터 인코딩 기 중 하나입니다.주형 변수는 특정한 카테고리나 레이블을 가지는 데이터로, 예를 들어 "성별(남, 여)", "지역(서울, 부산, 대구)" 등이 있습니다. 그러나 대부분의 기계학습 알고리즘은 이러한 문자열 또는 레이블 형태의 데이터를 직접 처리할 수 없기 때문에, 이를 수치화하는 과정이 필요합니다. 단일 활성화는 이러한 문제를 해결하기 위해 각 범주를 독립적인 이진(binary) 벡터로 표현하는 방식입니다.
이 문서에서는 단일 활성화의 개념, 작동 원리, 장단점, 활용 사례 및 구현 방법에 대해 자세히 설명합니다.
작동 원리
단일 활성화는 각 범주형 값에 대해 하나의 새로운 열(column)을 생성하고, 해당 범주에 속하는 경우에만 그 열의 값을 1로 설정하고 나머지 열은 0으로 설정합니다. 이 방식은 범주 간의 순서나 크기 관계를 암시하지 않기 때문에 명목형 데이터(nominal data)에 특히 적합합니다.
예시
다음과 같은 "색상" 열이 있다고 가정해 봅시다:
| 색상 |
|---|
| 빨강 |
| 파랑 |
| 초록 |
| 빨강 |
이를 단일 활성화하면 다음과 같이 변환됩니다:
| 색상_빨강 | 색상_파랑 | 색상_초록 |
|---|---|---|
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |
| 1 | 0 | 0 |
이렇게 각 범주는 독립적인 이진 특성으로 표현되며, 모델이 범주 간의 관계를 잘못 해석하는 것을 방지합니다.
사용 사례
단일 활성화는 다음과 같은 상황에서 주로 사용됩니다:
- 기계학습 모델 학습 전 전처리: 회귀, 분류 모델 등에 입력 데이터를 제공할 때 범주형 변수를 수치형으로 변환.
- 신경망 입력층: 딥러닝 모델에서 범주형 입력을 임베딩 계층에 연결하기 전 단계로 활용.
- 서포트 벡터 머신(SVM), 랜덤 포레스트, 로지스틱 회귀 등 대부분의 알고리즘에서 범주형 변수 처리.
장점과 단점
장점
- 비순서성 보장: 범주 간에 임의의 순서나 거리 관계를 부여하지 않음. 예를 들어 "서울=1, 부산=2"처럼 숫자를 직접 할당하면 모델이 부산이 서울보다 더 크다고 오해할 수 있지만, 단일 활성화는 이를 방지.
- 단순하고 직관적: 구현이 간단하고 해석이 용이함.
- 모델 성능 향상:바른 인코딩은 모델의 예측 정확도를 높이는 데 기여.
단점
- 차원 증가(차원의 저주): 범주의 수가 많을수록 새로운 열이 급격히 증가하여 메모리 사용량과 계산 복잡도가 증가.
- 예: 100개의 국가를 단일 활성화하면 100개의 새로운 열이 생성됨.
- 희소성 문제: 대부분의 값이 0인 희소 행렬(sparse matrix)이 생성되어 저장 및 처리 효율이 낮아질 수 있음.
- 비효율성: 고유값이 매우 많은 경우(예: 사용자 ID, 우편번호 등)에는 다른 인코딩 방식(예: 임베딩, 타깃 인코딩)이 더 적합할 수 있음.
구현 방법 (Python 예시)
Python에서는 [pandas](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%EB%8F%84%EA%B5%AC/pandas)와 [scikit-learn](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%EB%8F%84%EA%B5%AC/scikit-learn) 라이브러리를 통해 단일 활성화를 쉽게 수행할 수 있습니다.
pandas 사용
import pandas as pd
data = pd.DataFrame({'색상': ['빨강', '파랑', '초록', '빨강']})
encoded_data = pd.get_dummies(data, columns=['색상'])
print(encoded_data)
scikit-learn 사용
from sklearn.preprocessing import OneHotEncoder
import numpy as np
encoder = OneHotEncoder(sparse_output=False) # sparse=False: 밀집 배열 반환
colors = np.array([['빨강'], ['파랑'], ['초록'], ['빨강']])
encoded = encoder.fit_transform(colors)
print(encoded)
print("카테고리:", encoder.categories_)
관련 기법
단일 활성화 외에도 범주형 데이터 인코딩을 위한 다양한 기법이 존재합니다:
- 라벨 인코딩(Label Encoding): 각 범주에 정수를 할당. 순서가 있는 순서형 데이터(ordinal data)에 적합.
- 임베딩(Embedding): 딥러닝에서 고차원 범주를 저차원 밀집 벡터로 매핑.
- 타깃 인코딩(Target Encoding): 범주의 평균 타깃 값을 사용하여 인코딩. 회귀/분류 태스크에 유용하지만 과적합 주의 필요.
참고 자료
- Scikit-learn 공식 문서: OneHotEncoder
- Pandas 공식 문서: get_dummies
- Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow - Aurélien Géron
단일 활성화는 데이터 과학에서 범주형 변수를 다룰 때 반드시 숙지해야 할 기본적이면서도 강력한 기법입니다. 적절한 상황에서 사용하면 모델의 성능과 해석 가능성을 모두 향상시킬 수 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.