개발학습일지

[AI] 데이터 레이블 인코딩, 원핫 인코딩 하기 _LabelEncoder(), OneHotEncoder() 본문

AI/데이터 전처리

[AI] 데이터 레이블 인코딩, 원핫 인코딩 하기 _LabelEncoder(), OneHotEncoder()

처카푸 2024. 4. 16. 17:35

문자열 데이터를 

레이블 인코딩 또는 원핫 인코딩 하기 (LabelEncoder(), OneHotEncoder())

 

데이터를 학습하기 위해서는 방정식에 대입되어야 하는데

방정식은 수학식이므로 데이터는 모두 숫자로 되어 있어야 한다

따라서 문자열 데이터를 숫자로 바꿔줘야 한다

 

필요한 라이브러리 임폴트

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer

 

LabelEncoder() : 문자열 데이터를 정렬해서 순서대로 0부터 시작하는 숫자로 바꿔준다

  - 카테고리컬 데이터의 갯수가 3개 이상일 때는 Label Encoding으로 학습하면 학습이 잘 안된다

  3개 이상의 카테고리컬 데이터는 One-Hot Encoding을 이용해서 처리하면 학습이 잘 된다

# 변수로 저장해서 사용한다
encoder = LabelEncoder()
X['컬럼'] = encoder.fit_transform(X['컬럼'])

 

OneHotEncoder() : 문자열 데이터를 정렬해서 순서대로 0부터 시작하는 숫자로 바꿔 컬럼을 만들어준다

 - 원핫 인코딩한 결과가 맨 앞 컬럼으로 나온다

   원핫 인코딩을 하면 카데코리컬 데이터만큼 컬럼이 늘어난다

# 원핫 인코딩으로 바꾸고 싶은 컬럼의 인덱스를 []에 입력한다
# 바꾸고 싶은 컬럼이 여러개면 리스트 안에 인덱스만 써주면 된다 예) [1, 4, 5]
ColumnTransformer( [( 'encoder', OneHotEncoder(),[컬럼 인덱스] )], remainder='passthrough' )
# remainder='passthrough' > 원핫 인코딩이 아닌 컬럼은 그냥 둔다

# 변수에 저장하여 사용한다
ct = ColumnTransformer( [( 'encoder', OneHotEncoder(),[0] )], remainder='passthrough' )
X = ct.fit_transform(X)