Machine Learning

머신러닝 - Label Encoding , Ont-hot Encoding

yugyeong 2022. 12. 1. 10:26

 

 

데이터를 학습하기 위해서는 방정식에 대입되어야 하는데, 방정식은 수학식이므로 데이터는 모두 숫자로 되어있어야 한다.
따라서, 문자열 데이터를 숫자로 바꿔줘야 한다.

 

문자열 데이터를 숫자 데이터로 바꾸는 방법은 Label Encoding , Ont-hot Encoding 두가지가 있다.

 

 

Label Encoding

 

 

먼저, sklearn 라이브러리를 임포트 해준다.

 

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

from sklearn.compose import ColumnTransformer

 

 

수치데이터로 바꾸고자 하는 데이터를 정렬해서 확인을 한다.

아래의 예시에서는 데이터프레임 X 의 Country 컬럼을 이용하였다.

 

 

레이블 인코딩은 데이터를 정렬해서 순서대로 0부터 시작하는 숫자로 바꿔준다.

그러므로 아래의 데이터 France 는 0, Germany 는 1, Spain 은 2가 된다.

 

 

 

 

LabelEncoder() 를 메모리에 올려주기 위해서 변수 encoder 에 저장을 하였다.

fit_transform() 을 이용하여 괄호안에 인코딩 하고자 하는 데이터 컬럼을 넣어주면 아래와같이 숫자 데이터로 결과값이 리턴된다.

 

 

 

 

 

 

레이블 인코딩으로 변환한 후에 학습을 시켰을 때, 카테고리컬 데이터의 갯수가 3개 이상일 때는 레이블 인코딩으로 합습하면 학습이 잘 안된다.

 

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

 

 

 

Ont-hot Encoding

 

 

원핫 인코딩은 나타내고자 할 때는, ColumnTransformer([('encoder', OneHotEncoder(), [0])], remainder= 'passthrough')

과 같은 형태로 작성해준다.

 

메모리에 올려주기 위해서 ct 라는 변수에 저장을 하였다

 

먼저, ColumnTransformer() 를 이용하여 괄호 안에 리스트형식으로  'encoder', OneHotEncoder() 를 넣어준다.

여기서 'encoder'는 그냥 인코더 이름을 넣은 것이기 때문에 변경 가능하다.

 

그리고, 원핫 인코딩으로 바꾸고 싶은 컬럼의 인덱스를 써준다. 아래에서는 [0] 이라고 적었다.

만약에, 원핫 인코딩으로 바꾸고 싶은 컬럼이 여러개이면, 리스트안에 인덱스만 써주면 된다. [1, 4, 5]

 

remainder= 'passthrough' 는 원핫인코딩이 아닌 컬럼들은 그냥 냅둬라라는 의미이다.

 

 

변수 ct 를 fit_transform() 하여 괄호안에 원핫인코딩 하고자 하는 데이터프레임을 넣어준다.

fit_transform 을 하면 원핫 인코딩 한 컬럼들이 데이터프레임 제일 앞으로 나오게 된다.

 

 

아래의 결과에서 1-3 열은 원핫 인코딩 결과, 4-5 열은 X 데이터프레임의 passthrough 한 컬럼들이다.

 

 

 

결과값을 쉽게 이해하자면, 정렬했던 France , Germany , Spain 를 순서대로 1 0 0 , 0 1 0, 0 0 1과 같은 형태로 나타낸 것이다.

이러한 형태로 변경하는 것을 원핫 인코딩이라고 한다.