Python에서의 레이블 인코딩과 원-핫 인코딩 방법 구분하기


기본적으로 사이킷런(scikit)의 머신러닝 알고리즘은 숫자형, bool형만 입력 값으로 받아들입니다. 그렇기 때문에 문자열로 이루어진 데이터는 숫자형으로 인코딩하는 전처리 작업 후에 머신러닝 모델에 학습시켜아 합니다.

이렇게 인코딩 하는 방식에는 크게 레이블인코딩(Lable encoding)과 원-핫 인코딩(One-Hot Encoding)이 있습니다.

즉, 범주형 변수를 수치형 변수로 변경할 때 사용할 수 있습니다.


인코딩이란?

  • 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식을 말한다.
  • 즉, 컴퓨터가 이해할 수 있는 형식으로 바꿔주는 것입니다.
  • 내용에는 변화가 없고, 암호화로는 사용이 불가능합니다.

(1) 라벨 인코딩(Label Encoding)

  • n 개의 범주형 데이터를 0 부터 n-1 까지의 연속적 수치 데이터로 표현하는 인코딩 방식입니다.
  • 인코딩의 결과는 수치적인 차이를 의미하지 않습니다.
  • 순서가 없는 데이터를 인코딩할 때엔 적합하지 않습니다.

라벨 인코딩 사용법

from sklearn.proprocessing import LabelEncoder

le = LabelEncoder()

(2) 원-핫 인코딩(One-Hot Encoding)

  • 단어 집합의 크기를 벡터의 차원으로 합니다.
  • 표현하고 싶은 단어의 인덱스에 1을 부여, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다.
  • 이렇게 표현된 벡터를 원-핫 벡터(One-Hot vector)라고 합니다.
  • 자연어 처리를 위해서 텍스트를 컴퓨터가 이해할 수 있도록 숫자로 바꾸는 작업에 사용됩니다.

원-핫 인코딩의 한계

  • 단어의 개수가 늘어날 수록, 벡터를 저장하기 위해 필요한 공간이 계속 늘어난다는 단점이 있습니다.
  • 원-핫 벡터는 단어의 집합의 크기가 곧 벡터의 차원 수가 됩니다.
  • 단어 간 유사성을 알 수 없는 단점은 검색 시스템 등에서 문제가 될 수 있습니다.
    • 👉 해결 법
      • 카운트 기반의 벡터화 방법 - LSA(잠재적 의미 분석), HAL
      • 예측 기반의 벡터화 방법 - NNLM, RNNLM, Word2Vec, FastTaxt
      • 카운트, 예측 기반 모두 사용 - GloVe

원-핫 인코딩 사용법

(1) 사이킷런(sklearn)

  • 레이블 인코딩을 한 번 거쳐야 만들 수 있습니다 (상대적으로 비효율)
# onehotencoder 를 사용하기 전, LabelEncoder 를 해야 합니다.
from sklearn.preprocessing import OneHotEncoder

oh = OneHotEncoder()

(2) 판다스(pandas)

import pandas as pd

pd.get_dummies(df)


라벨인코딩과 원-핫인코딩


Reference


개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다 :)

댓글남기기