인코딩을 왜 할까??
인코딩은 컴퓨터가 아는 언어로 변환 해 주는 작업을 말한다.
컴퓨터는 0과1의 이진법만 이해를 할 수 있다. 따라서, 우리가 한글로 주고 머신러닝을 학습시키면 학습이 되지 않는다. 따라서 우리는 이러한 것들을 컴퓨터가 알아들을 수 있게 인코딩 하는 작업이 필수적이다.
Nominal vs Ordinal
Nominal 데이터에 사용하는 인코딩 방법과 Ordinal 데이터에 사용하는 인코딩 방법은 다르다.
- One-Hot encoding(원, 핫 인코딩)
- Nominal(명목형) 데이터에서 사용할 수 있다.(즉, 순서가 없을때)
- Ordinal데이터의 경우 순서가 있지만 Nominal데이터는 순서가 없는데 이때 Ordinal데이터를 위한 인코딩 기법을 사용하면 컴퓨터는 숫자로 인코딩 되어 안에서 관계를 형상하게 된다. 예를 들어 Male :0, Female :1 일때 0+1=1 이라는 관계가 생기거나 0인 Male이 높은것으로 만들어지는등 여러가지 관계가 형성되기때문에 Nominal데이터는 One-Hot encoding을 쓴다.
- 무엇이 다를까??
from category_encoders import OneHotEncoder
encoding = OneHotEncoder()
labels = encoding.fit_transform(labels)
labels
코드를 위와 같이 입력하면 아래와 같은 원리로 컬럼이 생긴다.
해당하는 컬럼에만 1이 나오고 나머지는 0이나온다. 이렇게 원핫인코딩 방식은 자체적으로 관계를 형성하지 못하게 하여 Nominal데이터의 인코딩 방법으로 사용이 된다.
- Ordinal encoding
- Ordinal(순서형)데이터를 인코딩 할 때 사용하는 방법으로 컬럼을 자동으로 숫자로 변환해 준다.
- 주의할 점으로는 Ordinal encoding의 파라미터에 있다.
- 바꾸고자 하는 컬럼을 지정할때는 "cols" 파라미터를 사용해서 지정해주면 되지만 이렇게 하게되면 랜덤으로 숫자변환이 됩니다. 따라서 원하는 숫자로 매칭시키기 위해서는 "mapping" 파라미터를 사용하면 된다.