새소식

딥러닝

[Feature Engineering]- Categorical Feature

  • -

Feature란?

샘플을 잘 설명하는 특징이다.
특징을 통해 특정 샘플을 수치화 할 수 있다.


Categorical vs Continuous Value

Continuous의 경우 비슷한 값은 비슷한 의미를 지님 (키,몸무게)

Categorical의 경우 비슷한 값일지라도 상관없는 의미 (단어, 클래스)

 


Categorical 피쳐는 아래 예시 처럼 유한한 선택 범위의 값을 갖는 피쳐이다.

  • 성별: 남자, 여자
  • 혈액형: A, B, O, AB
  • 이름: 공유, 강동원, …
  • 주소: 서울, 부산, 대전, …

일반적으로는 문자열 형태이지만 반(class)을 나타내는 '1', '2', '3'같은 경우는 숫자 형태이지만 '2'라는 값이 '1'보다 2배 더 크다는 의미가 아니므로 범주형 값으로 보아야 한다.
의사결정 트리 같은 모델의 경우는 문자열 형식 입력을 변형해 줄 필요가 없지만,
로지스틱 회귀, 서포트 벡터 머신등과 같은 모델에서는 반드시 수치형 피쳐로 전환해야한다.

 

 

범주형 피쳐의 인코딩 방법

Ordinal encoding(순서형 인코딩)

Ordinal encoding은 클래스 사이에 대소 관계가 존재하는 데이터에서 사용한다.

예를 들어 좋음, 보통, 나쁨이라는 클래스에 3, 2, 1처럼 대소 관계에 따라 범주형 피쳐에 하나의 수치 ID를 부여한다.

 

One-Hot encoding(원-핫 인코딩)

One-hot encoding은 클래스 사이에 대소관계가 존재하지 않는 데이터에 사용한다.
크기가 의미를 갖는 integer 대신 1개의 1(n-1)개의 0으로 이루어진 n차원의 벡터의 형태이다.

예를 들어, 혈액형의 경우 4차원의 희소 벡터(sparse vector)로 만든다.

A형 → (1,0,0,0)   B형 → (0,1,0,0)   O형 → (0,0,1,0)  AB형 → (0,0,0,1)

 

💬희소 벡터(Sparse Vector) :
원소 대부분이 0인 벡터를 희소벡터라고 한다.
(반대 개념: Dense Vector로 표현할 필요가 있음 → Vector embedding)

❗ 문제점
1. 클래스가 많아지면 희소 벡터는 차원의 개수가 많아지는 문제점이 있다.

→ 로지스틱 회귀 모델에서 파라미터의 개수가 차원의 증가에 따라 증가하게 되어 과적합의 문제를 일으킨다.
따라서 고차원 피쳐의 경우 피쳐 선택을 통해 최대한 차원을 줄여야 한다.
2. 서로 다른 두 벡터는 항상 직교(orthogonal)한다. cosine similarity가 0이기 때문이다.
→ 두 샘플 사이의 유사도(거리)를 구할 수 없다.

 

Binary encoding(이진 인코딩)

이진 인코딩은 순번 인덱스를 사용하여 각 클래스에 ID를 부여한 후, 각 클래스 ID를 이진법 코드로 나타내는 방법이다.

(이진법을 이용해 ID에 대해 해시 매핑을 진행했다고 볼 수 있다.)

 

이 방법은 0/1 고유벡터를 얻고 원핫 인코딩보다 차원의 수가 비교적 작다.

 

 

         

728x90
Contents