일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- GRU
- 강화학습
- 과적합
- 자연어 처리
- Q-Learning
- 회귀
- 손실 함수
- CNN
- 인공지능
- 데이터 전처리
- reinforcement learning
- 지도 학습
- 머신러닝
- 강화 학습
- 머신 러닝
- Machine Learning
- 신경망
- Deep learning
- python
- 차원 축소
- 최적화
- 인공 신경망
- 정규화
- 활성화 함수
- LSTM
- 교차 검증
- AI
- rnn
- 딥러닝
- q-러닝
- Today
- Total
move84
머신러닝: One-Hot Encoding vs. Label Encoding 본문
머신러닝 모델을 학습시키기 전에 데이터를 전처리하는 과정은 매우 중요합니다. 특히 범주형 데이터를 수치형 데이터로 변환하는 인코딩(Encoding) 기법은 머신러닝 모델의 성능에 큰 영향을 미칩니다. 이번 글에서는 널리 사용되는 두 가지 인코딩 기법, One-Hot Encoding과 Label Encoding을 비교 분석하고, 각 기법의 장단점과 활용 사례를 살펴봅니다.
💡 범주형 데이터와 인코딩 (Categorical Data & Encoding)
머신러닝 모델은 숫자 데이터를 기반으로 학습합니다. 하지만 현실 세계의 데이터는 숫자뿐만 아니라 텍스트(Text)나 범주(Category) 형태의 범주형 데이터도 포함합니다. 예를 들어, “색상”이라는 변수가 “빨강”, “파랑”, “초록” 세 가지 값을 가질 수 있습니다. 이러한 범주형 데이터를 머신러닝 모델이 이해할 수 있도록 수치형 데이터로 변환하는 과정이 바로 인코딩입니다.
➡️ 범주형 데이터 (Categorical Data): 몇 개의 범주로 구분되는 데이터
➡️ 인코딩 (Encoding): 범주형 데이터를 수치형 데이터로 변환하는 과정
🥇 Label Encoding (레이블 인코딩)
Label Encoding은 각 범주에 고유한 정수 값을 할당하는 간단한 인코딩 기법입니다. 예를 들어, “색상” 변수의 각 범주에 다음과 같이 정수 값을 할당할 수 있습니다.
빨강: 0
파랑: 1
초록: 2
장점*: 간단하고 구현하기 쉽습니다. 범주의 수가 많지 않을 때 유용합니다.
단점*: 정수 값의 크기에 따라 모델이 영향을 받을 수 있습니다. 예를 들어, 모델이 2보다 1을 더 중요하게 인식할 수 있습니다. 순서가 없는 범주형 데이터에는 적합하지 않습니다.
🔢 Label Encoding 예시 (Python)
import pandas as pd from sklearn.preprocessing import LabelEncoder # 데이터 생성 data = {'색상': ['빨강', '파랑', '초록', '빨강', '파랑']} df = pd.DataFrame(data) # LabelEncoder 객체 생성 label_encoder = LabelEncoder() # 레이블 인코딩 수행 df['색상_인코딩'] = label_encoder.fit_transform(df['색상']) # 결과 출력 print(df) # LabelEncoder가 매핑한 클래스 확인 print(label_encoder.classes_)
위 코드는 Pandas DataFrame을 사용하여 “색상” 열에 Label Encoding을 적용하는 예시입니다.
LabelEncoder
를 사용하여 범주에 정수 값을 할당하고, 인코딩된 결과를 새로운 열에 저장합니다.classes_
속성을 통해 각 범주에 어떤 정수 값이 할당되었는지 확인할 수 있습니다.
🥈 One-Hot Encoding (원-핫 인코딩)
One-Hot Encoding은 각 범주를 새로운 열로 변환하고, 해당 범주에 속하는 데이터는 1, 그렇지 않은 데이터는 0으로 표시하는 기법입니다. 예를 들어, “색상” 변수의 각 범주에 One-Hot Encoding을 적용하면 다음과 같은 새로운 열이 생성됩니다.
빨강 | 파랑 | 초록 |
---|---|---|
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
장점: 범주 간의 거리 개념을 없애 순서가 없는 범주형 데이터에 적합합니다. 머신러닝 모델의 성능을 향상시킬 수 있습니다.
단점: 범주의 수가 많을 경우, 데이터의 차원이 증가하여 메모리 사용량이 늘어나고 모델 학습 속도가 느려질 수 있습니다 (차원의 저주).
📊 One-Hot Encoding 예시 (Python)
import pandas as pd
# 데이터 생성
data = {'색상': ['빨강', '파랑', '초록', '빨강', '파랑']}
df = pd.DataFrame(data)
# One-Hot Encoding 수행
df_onehot = pd.get_dummies(df, columns=['색상'])
# 결과 출력
print(df_onehot)
위 코드는 Pandas의 get_dummies()
함수를 사용하여 “색상” 열에 One-Hot Encoding을 적용하는 예시입니다. columns
매개변수를 사용하여 인코딩할 열을 지정하고, One-Hot Encoding된 결과를 새로운 DataFrame에 저장합니다.
🎯 Label Encoding vs. One-Hot Encoding 비교
특징 | Label Encoding | One-Hot Encoding |
---|---|---|
인코딩 방식 | 각 범주에 정수 값 할당 | 각 범주를 새로운 열로 변환 |
장점 | 간단하고 구현 용이 | 범주 간 거리 문제 해결, 순서 없는 데이터에 적합 |
단점 | 정수 값 크기에 영향, 순서 없는 데이터에 부적합 | 차원 증가로 메모리 사용량 증가 |
사용 사례 | 순서가 있는 범주형 데이터 (예: 학년) | 순서가 없는 범주형 데이터 (예: 색상, 성별) |
💡 언제 어떤 인코딩 기법을 사용해야 할까?
Label Encoding: 범주 간에 순서가 있는 경우 (예: 학년, 만족도 등급) 또는 범주의 수가 적은 경우에 사용합니다.
One-Hot Encoding: 범주 간에 순서가 없는 경우 (예: 색상, 국가, 성별) 또는 범주의 수가 많지 않은 경우에 사용합니다. 범주의 수가 너무 많으면 차원의 저주 문제가 발생할 수 있으므로 주의해야 합니다.
💡 결론
One-Hot Encoding과 Label Encoding은 모두 범주형 데이터를 수치형 데이터로 변환하는 중요한 기법입니다. 각 기법의 장단점을 이해하고, 데이터의 특성에 맞는 적절한 인코딩 기법을 선택하는 것이 머신러닝 모델의 성능 향상에 기여합니다. 데이터 전처리는 머신러닝 모델의 성능을 결정하는 중요한 단계이므로, 다양한 인코딩 기법을 경험하고 데이터를 분석하여 최적의 방법을 선택해야 합니다.
'머신러닝' 카테고리의 다른 글
머신러닝: 표 형식 데이터 Data Augmentation (데이터 증강) 방법 (0) | 2025.03.04 |
---|---|
머신러닝: 순서형 인코딩 전략 (0) | 2025.03.04 |
머신러닝: 범주형 변수 처리하기 (0) | 2025.03.04 |
머신러닝 텍스트 데이터 전처리 기법: 깔끔한 텍스트로 모델 성능 향상 (0) | 2025.03.04 |
머신러닝: 도메인 지식을 활용한 Feature Engineering (0) | 2025.03.04 |