원-핫 인코딩(One-Hot Encoding)은 범주형 데이터를 이진 벡터(Binary Vector)로 변환하는 방법입니다.
각 범주(Category)를 고유한 이진 값(0 또는 1)으로 변환하여 머신러닝 모델이 처리할 수 있도록 합니다.
원-핫 인코딩의 필요성
• 대부분의 머신러닝 알고리즘은 숫자 데이터를 입력값으로 요구합니다.
• 따라서 범주형 데이터(예: 색상, 도시 이름, 성별)를 수치화해야 합니다.
• 예제
ID | Color |
1 | Red |
2 | Blue |
3 | Green |
4 | Blue |
5 | Red |
여기서 Color 열을 머신러닝 모델에서 사용하려면, 문자 데이터를 숫자로 변환해야 합니다.
• 단순히 Red=1, Blue=2, Green=3과 같이 숫자로 매핑하면 순서의 의미가 부여되는 문제가 발생합니다. (Red < Blue < Green처럼 보이지만 이는 잘못된 해석)
• 해결 방법으로 원-핫 인코딩을 사용합니다.
원-핫 인코딩 적용 예제
1. pandas를 활용한 원-핫 인코딩
import pandas as pd
# 샘플 데이터
df = pd.DataFrame({'Color': ['Red', 'Blue', 'Green', 'Blue', 'Red']})
# 원-핫 인코딩 적용
df_encoded = pd.get_dummies(df, columns=['Color'])
# 결과 출력
print(df_encoded)
[결과]

• 원래 Color 열이 제거되고, 새로운 세 개의 열(Color_Blue, Color_Green, Color_Red)이 추가됨.
• 값이 해당 색상일 때 1, 아닐 때 0
2. sklearn을 활용한 원-핫 인코딩
from sklearn.preprocessing import OneHotEncoder
import pandas as pd
# 샘플 데이터 (2차원 배열 형태로 변환 필요)
data = [['Red'], ['Blue'], ['Green'], ['Blue'], ['Red']]
df = pd.DataFrame(data, columns=['Color'])
# 원-핫 인코딩 적용
encoder = OneHotEncoder(sparse=False) # sparse=False로 설정하면 배열로 변환됨
encoded_array = encoder.fit_transform(df[['Color']])
# 결과를 DataFrame으로 변환
df_encoded = pd.DataFrame(encoded_array, columns=encoder.get_feature_names_out(['Color']))
print(df_encoded)
원-핫 인코딩의 장점과 단점
1. 장점
• 순서가 없는 범주형 데이터 처리에 적합 → Red=1, Blue=2, Green=3 같은 잘못된 순서를 방지.
• 거리 기반 알고리즘(KNN, SVM, K-Means)에서 유용 → 범주형 데이터가 숫자로 표현되므로 거리를 계산할 수 있음.
• 해석이 쉬움 → 특정 범주에 속하는지 여부를 0과 1로 표시.
2. 단점
• 고차원 문제 발생 (Curse of Dimensionality)
✔︎ 범주가 많아질수록 열(Column)의 개수가 급격히 증가함.
✔︎ 예: 100개의 서로 다른 도시에 대해 원-핫 인코딩을 적용하면 100개의 새로운 열이 생김.
• 메모리 사용량 증가
✔︎ 대규모 데이터셋에서는 메모리를 많이 사용하므로 효율적인 변환 방법이 필요.
원-핫 인코딩 최적화 방법
1. drop_first=True 옵션 사용
• 원-핫 인코딩 시 불필요한 차원 감소 (컬럼 하나 제거)
• n개의 범주를 n-1개의 컬럼으로 변환
df_encoded = pd.get_dummies(df, columns=['Color'], drop_first=True)
print(df_encoded)
• Color_Red 컬럼이 사라지고, 다른 두 컬럼(Color_Blue, Color_Green)만 남음.
• 모델이 Color_Blue=0 and Color_Green=0이면 자동으로 Color_Red로 인식 가능.
2. 빈도가 낮은 범주는 ‘기타’(Others)로 처리
• 데이터에 등장 빈도가 낮은 범주는 Other로 통합하여 차원 수를 줄임.
df['Color'] = df['Color'].apply(lambda x: x if x in ['Red', 'Blue'] else 'Other')
df_encoded = pd.get_dummies(df, columns=['Color'])
print(df_encoded)
3. 차원 축소 기법 적용 (PCA, Feature Hashing)
• 원-핫 인코딩으로 생긴 고차원 데이터를 PCA를 사용하여 낮은 차원으로 압축.
from sklearn.decomposition import PCA
pca = PCA(n_components=2) # 2개의 차원으로 축소
df_pca = pca.fit_transform(df_encoded)
관련 블로그
파이썬 데이터 분석 절차
파이썬을 활용한 데이터 분석은 데이터 수집 → 데이터 전처리 → 탐색적 데이터 분석(EDA) → 모델링 및 분석 → 시각화 및 인사이트 도출의 과정을 거칩니다. 데이터 수집 (Data Collection)1. 데이
make2t.tistory.com
'IT > 데이터' 카테고리의 다른 글
이미지 데이터 어노테이션 (0) | 2025.02.26 |
---|---|
데이터 표준화 중요성 (1) | 2025.02.26 |
Selenium을 이용한 웹 크롤링 기법 (2) | 2025.02.24 |
ETL 오픈소스 도구 (1) | 2025.02.24 |
데이터 거래소 특징 및 미래예측 (1) | 2025.02.24 |