일반적으로는 문자열 형태이지만 반(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차원의 벡터의 형태이다.
💬희소 벡터(Sparse Vector) : 원소 대부분이 0인 벡터를 희소벡터라고 한다. (반대 개념: Dense Vector로 표현할 필요가 있음 → Vector embedding)
❗ 문제점 1. 클래스가 많아지면 희소 벡터는 차원의 개수가 많아지는 문제점이 있다. → 로지스틱 회귀 모델에서 파라미터의 개수가 차원의 증가에 따라 증가하게 되어 과적합의 문제를 일으킨다. 따라서 고차원 피쳐의 경우 피쳐 선택을 통해 최대한 차원을 줄여야 한다. 2. 서로 다른 두 벡터는 항상 직교(orthogonal)한다. cosine similarity가 0이기 때문이다. → 두 샘플 사이의 유사도(거리)를 구할 수 없다.
Binary encoding(이진 인코딩)
이진 인코딩은 순번 인덱스를 사용하여 각 클래스에 ID를 부여한 후, 각 클래스 ID를 이진법 코드로 나타내는 방법이다.