데이터를 처리하다가 보면 범주형 자료를 변환해야할 때가 있다. 대표적으로 원핫 인코딩(One-Hot Encoding)과 라벨 인코딩(Label Encoding)은 범주형 데이터를 숫자형 데이터로 변환하는 방법이다. 이러한 변환은 대부분의 머신러닝 알고리즘이 범주형 데이터를 직접 처리할 수 없기 때문에 필요하다. 아래에 그 과정을 서술해보도록 하겠다.

라벨 인코딩 (Label Encoding)
라벨 인코딩은 범주형 변수의 각 범주를 고유한 정수로 변환한다. 예를 들어, '빨강', '노랑', '파랑'은 각각 0, 1, 2와 같은 숫자로 변환될 수 있다.
from sklearn.preprocessing import LabelEncoder
import pandas as pd
# 샘플 데이터 생성
data = {'색상': ['빨강', '노랑', '파랑', '노랑']}
df = pd.DataFrame(data)
# 라벨 인코더 생성 및 적용
encoder = LabelEncoder()
df['색상_인코딩'] = encoder.fit_transform(df['색상'])
print(df)
원핫 인코딩 (One-Hot Encoding)
원핫 인코딩은 각 범주를 표현하기 위해 별도의 열을 생성한다. 각 범주에 해당하는 열에는 1의 값이, 나머지 열에는 0의 값이 할당된다. 이 방식은 범주 간의 순서나 거리를 고려하지 않아야 할 때 유용하다.
from sklearn.preprocessing import OneHotEncoder
import pandas as pd
# 샘플 데이터 생성
data = {'색상': ['빨강', '노랑', '파랑', '노랑']}
df = pd.DataFrame(data)
# 원핫 인코더 생성 및 적용
encoder = OneHotEncoder(sparse=False)
df_onehot = pd.DataFrame(encoder.fit_transform(df[['색상']]), columns=encoder.get_feature_names_out(['색상']))
# 원본 데이터프레임과 원핫 인코딩된 데이터프레임 병합
df_final = pd.concat([df, df_onehot], axis=1)
print(df_final)
라벨 인코딩과 원핫 인코딩은 각각의 장단점이 있다
라벨 인코딩은 범주의 개수만큼 숫자 범위가 정해지지만, 숫자 사이의 관계가 모델에 부적절한 가정을 도입할 수 있다는 단점이 있다.
원핫 인코딩은 이러한 가정을 도입하지 않지만, 범주의 수가 많을 때 많은 수의 열을 생성해 차원의 저주 문제를 야기할 수 있다.
따라서 사용할 인코딩 방식은 모델링할 데이터의 특성과 머신러닝 알고리즘의 요구 사항을 고려하여 결정해야 한다.
'IT > 데이터분석 도전하기' 카테고리의 다른 글
| [상관계수] 피어슨 상관계수와 스피어만 상관계수의 이해: 언제 어떤 것을 사용해야 할까? (0) | 2024.02.20 |
|---|---|
| [다중공선성] 다중공선성 문제와 해결 방법 (0) | 2024.02.16 |
| [데이터 분석] 데이터 분석 기본 과정 (0) | 2024.02.02 |
| [데이터 정제] 데이터 정규화(Normalization) 및 표준화(Standardization) (0) | 2024.01.29 |
| [변수] 독립변수와 종속변수가 무엇일까? (0) | 2024.01.27 |