[으쌰복습, 올라잇팀] Ordinal Encoding

hyemin·2022년 11월 10일
0

ML

목록 보기
4/9

Ordinal Encoding

인코딩을 하는 이유 : 머신 러닝 모델들의 대부분은, 보통 string type로 이루어진 범주형 변수를 이해하지 못한다. 그렇기 때문에 숫자로 인코딩을 해줘야 하고, 데이터에 따라 적합한 인코딩 방법이 필요하다.

정의

  • 순서가 있는 범주형 변수(Ordinal variables)를 숫자로 변환하는 인코딩
    • 순서가 있는 범주형 변수란 ? 등급(1등급, 2등급, 3등급), 영화평점 별 갯수, 학점
  • 바꾸고자 하는 컬럼을 지정할 때, “cols” 파라미터를 사용해서 지정하면 되지만, 랜덤으로 숫자 변환이 된다. 원하는 숫자로 매칭시키고 싶다면 “mapping” 파라미터를 사용하면 된다.

특징

  • mathematical value를 가진다.

  • 범주형 데이터를 희소 행렬(Sparse Matrix) 로 반환해준다.

    • 희소 행렬 : 행렬에 0이 대부분이고, 0이 아닌 요소(non-zero elements)가 매우 적은 경우, 0은 곱연산에 의미가 없다. 따라서 일반적인 행렬 곱연산은 비효율적이기 때문에 행렬 곱을 수행하기 위해 희소행렬 형태로 재구성한다.
    • 0이 아닌 요소에 대해서만 (행 인덱스, 열 인덱스, 값)을 가진 형태로 저장하고 불필요한 0인 요소는 따로 저장하지 않는다.
      출처: 위키백과 출처: 위키백과
  • 범주가 너무 많을 경우 one-hot-encoding 사용이 어렵기 때문에 ordinal encoding을 이용하기 좋다.

    • 트리 모델의 경우, 중요한 피처가 상위 노드를 점하여 분할하게 되는데, 원핫 인코딩을 한 특성은 뽑히기 불리한 상태가 된다. (예시 부분에서 한 번 더 설명)
    • 트리모델에서의 오디널 인코딩 설명 : https://aimb.tistory.com/143
    • 트리모델에서의 Cadinality
      Cardinality(집합의 크기)
      - A = {1, 2, 5} → cardinality of 3
      - 카테고리가 너무 많은 경우(high Cardinality)는 one-hot encoding 사용하기 적합하지 않다
  • 범주 간 간격이 일정하지 못할 경우 → OrdinalEncoder 사용 보다는 순서 간의 상하 관계가 있어도 nominal한 변수로 보고 OneHotEncoder나 get_dummies 인코딩을 하는 편이 낫다.

  • 실제 대다수의 데이터는 상하관계 혹은 피처 간의 차이가 샘플마다 다른 경우가 많기 때문에 ordinal encoding을 사용하는 일은 드물다.(https://haehwan.github.io/posts/sta-Label-ordinal/)

    • ex. A가 느끼는 상, 중의 차이 =! B가 느끼는 상, 중의 차이
    • neural network와 같은 딥러닝에서는 ordinal한 피쳐들이 가지는 관계가 원핫인코딩을 통해서도 반영이 될 수 있기 때문에 오디널 인코딩의 사용 경우가 적어지고 있다.

참고

profile
아직 고쳐나가는 중.

0개의 댓글