먼저 인코딩이 있으면 디코딩도 있을거고 이 두개 차이가 뭔데..?

컴퓨터 구조 시간에 인코더랑 디코더를 배웠던 기억이 있는데 이게 머신러닝에서도 쓰인다고..?

 

간단하게 설명하자면

  • 인코더 : 원래있는 데이터를 사용자가 정의한 방식으로 다르게 표현하는 것  (  ex. 암호문 만들기 )
  • 디코더 : 인코더로 다르게 표현된 값을 다시 원상복구 시키는 것 ( ex. 암호문 해독기 )

그럼 머신러닝에서 인코더는 언제 쓰여..?

 

머신러닝에 있어 데이터는 수치형뿐만 아닌 범주형의 데이터들도 많아. 또는 string값들도 있지

머신이 교육을 하기 위해서는 당연히 string값들보단 int형으로 들어가는게 편하겠지 우리가 동작하는 과정을 이해 하기 쉽고.

 

그러기 위해서 범주형이나 string의 값들을 int로 다르게 표현하기 위해서 사용되는게 인코더야

 


Sklearn.preprocessing 패키지를 이용한 범주형 변수 인코딩

여기에서 범주형 변수란, 차의 등급을 나타내는 [소형, 중형, 대형] 처럼 표현되는 변수이다.

범주형 변수는 주로 데이터 상에서 문자열로 표현되는 경우가 많으며, 문자와 숫자가 매핑되는 형태로 표현되기도 한다.

 

위 패키지에서 다뤄 볼 것은 label encoding, one-hot encoding이다.

 


1. Label Encoding

라벨 인코딩은 n개의 범주형 데이터를 0~n-1 의 연속적인 수치 데이터로 표현한다.


소형 : 0
중형 : 1
대형 : 2

  • 라벨 인코딩은 간단한 방법이지만, '소형'과 '중형'이라는 범주형 데이터가 가지고 있는 차이가 0과 1의 수치적인 차이라는 의미가 아님을 주의해야 한다..

 

 


2. One-hot Encoding

원핫 인코딩은 n개의 범주형 데이터를 n개의 비트(0,1) 벡터로 표현한다.
예를 들어, 위에서 언급한 소형, 중형, 대형으로 이루어진 범주형 변수를 원핫 인코딩을 통해 변환하면 다음과 같이 표현할 수 있습니다.


소형 : [1, 0, 0]
중형 : [0, 1, 0]
대형 : [0, 0, 1]

  • 원핫 인코딩으로 범주형 데이터를 나타내게되면, 서로 다른 범주에 대해서는 벡터 내적을 취했을 때 내적 값이 0이 나오게 된다. 간단하게 말해서 중형에 1값이 있다고 다른 소형이나 대형에서 0이었던 값이 변하는것이 아닌 독립적으로 계산된다.
  • Sklearn의 One-hot Encoder는 numpy 행렬로 입력을 넣어줘야 정상적으로 작동하므로, pandas DataFrame에서 numpy-array로 추출하여 사용한다.

+ Recent posts