본문 바로가기

빅데이터/전처리

범주형 변수의 인코딩 (Categorical Encoding)

머신(컴퓨터)들은 텍스트를 인식할 수 없다.

따라서 범주형 변수들을 처리하고 싶을 때 우리는 Categorical Encoding을 해주어야한다.

 

카테고리컬 인코딩이란?

 

Categorical encoding is a process of converting categories to numbers.

카테고리컬 인코딩은 범주형 변수를 숫자로 바꿔주는 것이다.

 

카테고리컬 인코딩의 종류

카테고리컬 인코딩에는 크게 2가지가 있다.

  • Label Encoding (레이블 인코딩)
  • One-Hot Encoding (원-핫 인코딩)

 

Label Encoding (레이블 인코딩)

레이블 인코딩을 코드를 통해 알아보자

#라이브러리 import
import pandas as pd
import numpy as np

#급여.csv 불러오기
df=pd.read_csv("Salary.csv")

위와 같은 데이터에서 country는 범주형 변수이다.

따라서 이를 수치형으로 바꿔주기 위해 여기서는 레이블 인코딩을 할 것이다.

 

# sklearn에서 레이블 인코더를 불러온다
from sklearn import preprocessing
# 레이블 인코더 객체 저장
label_encoder = preprocessing.LabelEncoder()
# Country 컬럼을 인코딩 해준다. 
data['Country']= label_encoder.fit_transform(data[‘Country']) 
print(data.head())

위 과정을 통해 범주형변수가 숫자로 바뀌었다.

인도는 0, 미국은 2, 일본은 1로.

 

레이블 인코딩의 단점은?

원래 Country컬럼은 단순히 나라들의 이름으로 이루어져있다.

그러나 우리가 레이블 인코딩을 하면서 0,1,2 이렇게 순서가 생겨버렸다.

컴퓨터는 이걸 순서로 이해하고 처리할 확률이 높다.

 

이러한 레이블 인코딩의 단점을 해결하기 위해 원-핫 인코딩을 사용한다.

 

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

원-핫 인코딩을 코드를 통해 알아보자.

# 원-핫 인코더를 import한다
from sklearn from sklearn.preprocessing import OneHotEncoder
# 원-핫 인코더 객체 생성
onehotencoder = OneHotEncoder()
# 1차원 Country 컬럼을 2차원으로 바꿔준다 
X = onehotencoder.fit_transform(data.Country.values.reshape(-1,1)).toarray()
# 원본 데이터 프레임에 추가해준다.
dfOneHot = pd.DataFrame(X, columns = ["Country_"+str(int(i)) for i in range(data.shape[1])]) 
df = pd.concat([data, dfOneHot], axis=1)
# Country 컬럼을 없애준다.
df= df.drop(['Country'], axis=1) 
# 결과 확인
print(df.head())

위의 결과 처럼 3개의 컬럼이 새로 생겼다.

 

하지만 우리는 2개의 컬럼만으로도 3개의 국가를 구별할 수 있다.

2,3번째 컬럼만을 이용하여 생각해본다면

00 은 인도.

01 은 미국.

10 은 일본.

 

따라서 우리는 첫번째 컬럼을 없애주기로 한다.

df = df.drop(df.columns[[0]], axis=1)

원-핫 인코딩의 단점은?

1차원을 2차원으로 변경해주는 것이기 때문에 자칫 데이터가 비대해질 수 있다.

언제 원-핫 인코딩을 사용하고, 언제 레이블 인코딩을 사용하지?

이 문제는 어떤 데이터셋을 사용하고, 어떤 모델을 사용하는지에 따라 달라질 것이다.

 

원-핫 인코딩을 사용하는 경우:

  1. 범주형 변수에 순서가 없다 (위의 Country 변수 처럼)
  2. 범주의 종류가 별로 없어서 효과적으로 원-핫 인코딩의 적용이 가능할 때.

레이블 인코딩을 사용하는 경우:

  1. 범주형 변수가 순서가 있다 (초등학교, 중학교, 고등학교)
  2. 범주의 종류가 꽤 많아서 원-핫 인코딩으로 다루기 힘들다고 생각될 때.

'빅데이터 > 전처리' 카테고리의 다른 글

Feature Selection  (0) 2021.06.16
차원의 저주(Curse of Dimensionality)  (0) 2021.06.16
데이터 전처리  (0) 2021.06.13