원-핫 인코딩
- 범주형 데이터를 컴퓨터가 이해할 수 있는 숫자(벡터)로 변환하는 기법
- 단순히 숫자로 바꾸는 '라벨 인코딩'과 달리, 각 카테고리를 독립적인 차원으로 만들고 해당되는 인덱스에만 1, 나머지는 0 부여
- 필요한 이유
- 머신러닝 알고리즘은 기본적으로 수치 데이터를 계산!
- 문제점: '사과=1, 바나나=2, 딸기=3'으로 인코딩하면, 모델은 '딸기(3)가 사과(1)보다 크다'거나 '사과와 바나나를 더하면 딸기다'라는 잘못된 관계성 학습할 수 있다.
- 해결: 원-핫 인코딩은 모든 항목을 독립적인 축으로 분리하여 이러한 서열이나 거리감 제거
- 머신러닝 알고리즘은 기본적으로 수치 데이터를 계산!
- 장점:
- 범주형 데이터 간의 관계가 없는 경우(성별, 지역 등) 왜곡 없이 학습 가능
- 단점:
- 차원의 저주: 카테고리가 너무 많아지면 변수가 기하급수적으로 늘어나고 메모리 낭비 심해짐
구현방법
① 판다스의 get_dummies
import pandas as pd
data = {'과일': ['사과', '바나나', '딸기', '사과']}
df = pd.DataFrame(data)
# 원-핫 인코딩 적용
encoded_df = pd.get_dummies(df['과일'])
② Scikit-learn의 OneHotEncoder
- 실제 머신러닝 파이프라인에 포함시키거나, 학습 데이터와 테스트 데이터의 카테고리 일관성을 유지해야 할 때 권장
from sklearn.preprocessing import OneHotEncoder
import numpy as np
items = np.array(['사과', '바나나', '딸기', '사과']).reshape(-1, 1)
oh_encoder = OneHotEncoder()
oh_labels = oh_encoder.fit_transform(items)'내일배움캠프' 카테고리의 다른 글
| [내일배움캠프] TIL 34일차 26.02.24(화) (0) | 2026.02.24 |
|---|---|
| [내일배움캠프] TIL 33일차 26.02.23(월) (0) | 2026.02.23 |
| [내일배움캠프] TIL 31일차 26.02.13(금) (0) | 2026.02.13 |
| [내일배움캠프] TIL 31일차 26.02.12(목) (0) | 2026.02.12 |
| [내일배움캠프] TIL 30일차 26.02.11(수) (0) | 2026.02.11 |