원-핫 인코딩

zoya·2024년 4월 27일

인공지능 공부

목록 보기
8/19

원-핫 인코딩(One-hot encoding)은 범주형 데이터를 처리할 때 label을 표현하는 방법입니다.
선택해야 하는 선택지의 개수만큼 차원을 가지면서 각 선택지의 인덱스에 해당하는 원소에는 1, 나머지 원소는 0의 값을 가지도록 하는 표현 방법입니다.
예를 들어서 강아지, 고양이, 거북이라는 3개의 선택지가 있다고 가정하겠습니다.
원-핫 인코딩을 하기 위해서는 우선 각 선택지에 순차적으로 정수 인덱스를 부여합니다.
강아지 = [1,0,0]
고양이 = [0,1,0]
거북이 = [0,0,1]
총 선택지는 3개였으므로 위 벡터들은 전부 3차원의 벡터가 되었습니다. 이와 같이 원-핫 인코딩으로 표현된 벡터를 원-핫 벡터(one-hot vector)라고 합니다.

원-핫 벡터의 무작위성

데이터를 원-핫 벡터로 표현해야만 다중 클래스 분류 문제를 풀 수 있는 것은 아닙니다. 그러나 대부분의 다중 클래스 분류 문제가 각 클래스 간의 관계가 균등하다는 점에서 원-핫 벡터는 적절한 표현 방법입니다.

다수의 클래스를 분류하는 문제에서는 이진 분류처럼 2개의 숫자 label이 아니라 클래스의 개수만큼 숫자 label이 필요합니다. 이때 직관적으로 생각해볼 수 있는 라벨링 방법은 분류해야 할 클래스 전체에 정수 인코딩을 하는 것입니다. 예를 들어서 분류해야할 label이 [red, green, blue]와 같이 3개라면 각각 0,1,2 로 라벨링을 하는 것이죠. 그러나 일반적인 다중 클래스 분류 문제에서 라벨링 방법으로는 위와 같은 정수 인코딩이 아니라 원-핫 인코딩을 사용하는 것이 보다 클래스의 성질을 잘 표현하였다고 할 수 있습니다.

red, green, blue 라는 3개의 클래스가 존재하는 문제가 있다고 가정합니다. 정수 인코딩을 사용해서 각각 1,2,3 을 부여했을 때 평균 제곱 오차를 사용하면 정수 인코딩이 어떤 문제를 일으킬 수 있는지 보겠습니다.

실제값이 green일 때 예측값이 red라면 제곱 오차는 (2-1)**2 = 1 입니다.
실제값이 blue일 때 예측값이 red라면 제곱 오차는 (3-1)**2 = 4 입니다.
즉, green과 red의 오차보다 blue와 red의 오차가 더 큽니다. 이는 모델에게 green이 blue보다 red에 더 가깝다는 정보를 주는 것과 마찬가지입니다.

정수 인코딩의 순서 정보가 도움이 되는 분류 문제도 존재하지만 대부분은 그렇지 않습니다. 도움이 되는 경우는 각 클래스가 순서의 의미를 가지고 있어서 회귀를 통해 분류 문제를 풀 수 있는 경우입니다. [10대, 20대, 30대, 40대]와 같은 경우가 이에 해당됩니다. 하지만 일반적인 분류 문제에서 각 클래스는 순서의 의미를 가지고 있지 않으므로 각 클래스 간의 오차는 균등한 것이 옳습니다.
원-핫 인코딩을 통해 얻은 원-핫 벡터들은 모든 쌍에 대해서 유클리드 거리를 구해도 전부 유클리드 거리가 동일합니다. 원-핫 벡터는 이처럼 각 클래스의 표현 방법이 무작위성을 가진다는 점을 표현할 수 있습니다. 그러나 때로는 단어의 유사성을 구할 수 없다는 단점이 있습니다.

profile
동물을 좋아하는 개발자(희망)의 저장소

0개의 댓글