범주형 피쳐
범주형 피쳐는 성별, 혈액형, 중증도 등등으로 나뉠 수 있습니다. 먼저 일반적인 범주형 자료로는 성별같이 남/녀로 나뉘는 이진형 자료, 혈액형같이 A/B/O/AB로 나뉘는 다중 클래스형이 있으며, 중증도 정보인 미미함/중간/심함과 같이 순서 정보를 담고 있으면 순서형 자료로 볼 수 있습니다. 이러한 자료들은 일반적으로 문자열 형으로 입력이 되어 트리기반 알고리즘에서는 큰 문제없이 작동합니다. 하지만, 그 외의 많이 사용하는 모델들은 모두 수치적인 자료만 인식 가능하다보니, 적절한 수치로의 변환이 필요합니다.
단순한 이진형 자료의 경우 0/1로 코딩하면 되니 문제가 되지는 않지만, 그 외의 다중 클래스형과 순서형 자료에 대하여 어찌 변환해야하는지 기본적인 방법을 통해 확인해보겠습니다.
다중 클래스
다중 클래스는 범주의 수가 3개 이상의 경우를 의미합니다. 이러한 경우 크게 이진 인코딩과, 원핫 인코딩을 사용 가능합니다. 앞선 예시처럼 혈액형을 통해 이야기 해보겠습니다.
이진 인코딩
이진 인코딩은 각각의 클래스 마다 임의의 정수를 부여하고, 그러한 정수를 이진법으로 변환한 뒤, 코드로서 사용하는 방식입니다. 단순한 이진법을 이용한 해싱 기법입니다.
혈액형 | 임의의 정수 | 이진 변환 코드 |
A | 1 | 0 0 1 |
B | 2 | 0 1 0 |
O | 3 | 0 1 1 |
AB | 4 | 1 0 0 |
원핫 인코딩
원핫 인코딩도 이진 인코딩과 마찬가지로 매 클래스마다 임의의 정수를 부여합니다. 그 후 그러한 값에 각각 희소 벡터로 매핑하는 방식입니다. 여기서 희소벡터는 하나의 벡터에 할당된 임의의 정수 번째의 원소만 1이고, 나머지는 모두 0인 벡터를 의미합니다. 따라서 벡터의 길이는 클래스의 수 만큼 큽니다.
혈액형 | 임의의 정수 | 원핫 인코딩 |
A | 1 | 1 0 0 0 |
B | 2 | 0 1 0 0 |
O | 3 | 0 0 1 0 |
AB | 4 | 0 0 0 1 |
이러한 두가지 다중 클래스 인코딩을 비교하자면, 이진 인코딩이 원핫 인코딩에 비해 표현되는 차원의 수가 적다는 것입니다. 그럼에도 차원의 수가 클래스의 수에 비례하여 매우 커질 수 있기 때문에, 또한 희소 행렬이 되어 차원에 비해 많은 정보를 제시하지 못할 수 있기 때문에, 사용에 유의해야합니다. 특별히 이를 통해 변환 한 뒤에 단순히 거리를 재거나 아니면, 차원의 수에 매우 민감한 모형에 적용하게 될 때에는 주의를 요구합니다.
순서형 자료
순서형 자료는 위의 멀티 클래스에 비교하면 비교적 간단합니다. 정수로 매핑하여 모델에 사용하면 되기 때문입니다. 다만, 각각의 인터벌이 동일한지와 같은 데이터 정보를 고려하여 유연하게 적용해야합니다.
논의
1
그런데, 다음과 같은 질문을 할 수 있습니다.
위에서처럼 원핫 인코딩이나 이진 인코딩을 순서형 자료에도 적용이 가능하지 않을까요?
왜 같은 방법을 사용하지 않나요?
우선 순서를 알고있다는 것은 모델의 입장에서도 순서라는 정보를 더 가지고 갈 수 있게 되는 장점입니다. 이는 앞서 말한 차원의 문제와 밀접한 연관성이 있습니다. 전통적인 통계 모델에서는 이를 자유도와 연관지어 이야기 하게되는데, 결론만 말씀드리자면, 순서형 자료를 통해 검정을 하게된다면, 비교적 통계적 검정력이 강해지게 됩니다.
2
반대로, 순서형인데도, 원핫인코딩을 이용하면 더 좋은 성능이 나온다는 논의도 있습니다. 순서형 인코딩은 특정 머신러닝 모델에서 부적절한 가상 순서 관계를 도입해 성능을 저하시킬 가능성이 있다고도 합니다.
3
뿐만 아니라, 정수형을 벡터로 해싱하는데, 정수의 순서를 반영하며 희소 벡터로 코딩하는 법도 있습니다.
나중에 기회가 된다면, 수식과 함께 전부 짚고 넘어가겠습니다. 중요한 것은, 알고리즘에 맞는 변환법을 사용해야 한다는 것입니다.
출처
Book, "The Quest for Machine Learning"