본문 바로가기
AI/Machine Learning

라벨 인코딩, 원핫 인코딩

by Mesut Özil 2023. 11. 10.

라벨 인코딩(Label Encoding)원핫 인코딩(One-Hot Encoding)

범주형(카테고리) 데이터를 머신러닝 모델에 입력할 수 있는 형태로 변환하기 위해 사용

각각의 방식은 데이터의 특성과 모델에 따라 적합한 상황이 다릅니다.

 

1. 라벨 인코딩 (Label Encoding)

라벨 인코딩은 범주형 데이터를 숫자로 매핑하는 가장 기본적인 방법 중 하나

각 범주형 변수의 고유한 값을 순차적인 숫자로 변환하는 기술입니다.

 

예시

초졸: 0
중졸: 1
고졸: 2

대졸: 3

 

1) 라벨 인코딩(Label Encoding) 사용 O

1. 순서가 있는 범주형 변수

학력 수준('초졸', '중졸', '고졸', '대졸' 등)과 같이 순서가 있을 경우 라벨 인코딩을 사용

순서가 있는 범주에 대해 숫자를 부여하면 모델에게 순서 정보를 전달할 수 있습니다.

 

2. 범주의 값이 서로 상관관계가 있는 경우

'낮음', '보통', '높음'과 같이 범주 간에 서로 관련이 있을 때 숫자로 인코딩하여 관련성을 표현


2) 라벨 인코딩(Label Encoding) 사용 X

1. 순서가 없는 범주형 변수

'사과', '바나나', '오렌지'와 같이 범주 간에 순서가 없는 경우 라벨 인코딩을 사용하면 모델이 순서를 오해할 수 있습니다.

 

2. 범주 간의 상관관계가 없는 경우

범주 간의 상관성이 없을 때 라벨 인코딩을 사용하면 모델이 잘못된 관계성을 학습할 수 있습니다.

 

라벨 인코딩은 간단하지만,

이러한 수치 변환은 숫자의 크기의미가 없는 경우에도 크기 순서를 부여하게 되는 단점이 있습니다.

이는 일부 모델에서 숫자의 크기 가중치로 인식하여 잘못된 학습을 유발할 수 있습니다.

예시 코드

from sklearn.preprocessing import LabelEncoder

# 라벨 인코더 객체 생성
label_encoder = LabelEncoder()

# 범주형 데이터
categories = ['초졸', '중졸', '고졸', '대졸', '중졸']

# 라벨 인코딩 수행
encoded_labels = label_encoder.fit_transform(categories)

print("원본 범주형 데이터:", categories)
print("라벨 인코딩 결과:", encoded_labels)

# 출력 결과
원본 범주형 데이터: ['초졸', '중졸', '고졸', '대졸', '중졸']
라벨 인코딩 결과: [0 1 2 3 2]

 

 

 

2. 원핫 인코딩 (One-Hot Encoding)

원핫 인코딩(One-Hot Encoding)은 각 범주형 값에 대해 새로운 이진 특성을 만드는 방법

이 방법은 해당 범주의 유무를 0 또는 1로 나타내어 범주형 데이터를 변환


예시

사과: [1, 0, 0]
바나나: [0, 1, 0]
오렌지: [0, 0, 1]


원핫 인코딩은 각 범주가 독립적인 새로운 특성으로 표현되므로, 순서나 관계를 가정하지 않습니다.

이는 일반적으로 머신러닝 모델에서 범주형 데이터를 처리할 때 유용하지만

범주의 수 많거나 범주형 변수에 고유한 값이 많은 경우에는 데이터의 차원을 크게 증가시키므로 주의
원핫 인코딩은 주로 트리 기반 모델 또는 신경망과 같이 범주형 변수를 다루는 모델에서 효과적으로 사용

예시 코드

from sklearn.preprocessing import OneHotEncoder
import numpy as np

# 원핫 인코더 객체 생성
onehot_encoder = OneHotEncoder(sparse=False)

# 범주형 데이터
categories = ['초졸', '중졸', '고졸', '대졸', '중졸']

# 범주형 데이터를 2D 배열로 변환 (열 벡터로 변환)
categories = np.array(categories).reshape(-1, 1)

# 원핫 인코딩 수행
onehot_encoded = onehot_encoder.fit_transform(categories)

print("원본 범주형 데이터:", categories.flatten())
print("원핫 인코딩 결과:\n", onehot_encoded)

# 출력 결과
원본 범주형 데이터: ['초졸', '중졸', '고졸', '대졸', '중졸']
원핫 인코딩 결과:
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 1. 0. 0.]]

 

 

라벨 인코딩(Label Encoding)은 범주 간에 순서 또는 계층적인 관계가 있을 때 주로 사용됩니다.

그러나 범주 간의 순서나 관계가 없는 경우, 원핫 인코딩(One-Hot Encoding)이 일반적으로 더 선호되며,

이를 통해 각 범주가 독립적인 특성으로 간주됩니다. 또한, 원핫 인코딩은 머신러닝 모델에서

범주형 데이터를 처리하는데 유용하며, 모델이 범주 간의 관계를 오해하지 않도록 도와줍니다.

 

 

 

본 게시글은 ChatGPT의 도움을 받아 작성하였습니다.

'AI > Machine Learning' 카테고리의 다른 글

분류 모델 / 회귀 모델  (0) 2024.01.17
Ensemble (앙상블)  (0) 2024.01.10
다중공선성 (VIF, 분산팽창계수)  (0) 2023.12.18
Metrics (모델의 성능 지표)  (2) 2023.11.19
K-fold 교차 검증  (2) 2023.10.29