인공지능/머신러닝

문자 수치화,데이터분리: OneHotEncoder

공부짱짱열심히하기 2022. 12. 1. 11:03

카데고리컬 데이터가 3개이상이면 머신러닝의 효율이 떨어지는데

레이블인코딩은 이런점에서 취약하다

그럴때 사용하는 방식은

 

원핫 인코딩하는것

원핫 인코딩이란

3개이상의 카테고리컬 데이터를 전부 컬럼화 시켜서 하나의 1과 0으로 표현하는것

 

가령

컨트리라는 컬럼에 프랑스 독일 스페인이 있다면

France    Germany     Spain  
  1                 0             0
  0                 1             0
  0                 0             1

 

각 각에 해당되는 데이터에 1을 배당해서 컬럼화 시킴

이런식으로 Hot(1)이 one개 있다는 뜻

 

 

원핫인코딩을 위해선

from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ColumnTransformer( [ ('인코더이름',OneHotEncoder(),[인덱스] )   ] , remainder ='passthrough' )

컬럼을 바꾸는함수 columnTransformer (인코더이름, 어떤형식, [바꿀 데이터의 위치]) , 

remainder => 바꿀컬럼 인덱스외에 남은컬럼

passthroygh => 패스 하겠다.

 

저 묶음을 변수로 저장한 후에  

 

변수 X

이 데이터에서 카테고리컬 데이터인 컨트리 컬럼을 원핫 인코더로 바꾸려면 인덱스는 0번

ct = ColumnTransformer( [ ('encoder',OneHotEncoder(),[0] )   ] , remainder ='passthrough' )

 

 

 

ct.fit_transform( 바꿔줄데이터프레임 )

 

원핫 인코더로 변환되면 데이터는 무조건 앞으로 온다.

1,0,0,44,72로 바뀐걸 볼 수있다.

 

원핫 인코더

from sklearn.preprocessing import OneHotEncoder

from sklearn.compose import ColumnTransformer

ColumnTransformer( [ ('인코더이름',OneHotEncoder(),[인덱스] )   ] , remainder ='passthrough' )

ct.fit_transform( 바꿔줄데이터프레임 )