업데이트:

카테고리:

분류를 위한 데이터의 클래스는 대부분 카테고리 형태를 띕니다. 예를 들어, 동물 데이터의 클래스가 개,고양이,사자,뱀이 있다고 해봅시다. 머신러닝에서 학습을 진행하기 위해선 문자열 데이터를 사용하지 않고 주로 숫자형 데이터를 사용합니다. 따라서 우리는 “개,고양이,사자,뱀”을 숫자화 해야할 필요가 있습니다. 숫자화에 자주 사용되는 encoding 방식에는 label encodingone-hot encoding이 있습니다.


Label encoding


label encoding은 동물의 클래스를 1~n 의 수로 치환해주는 것이라고 보면 됩니다. 예를 들어, “개,고양이,사자,뱀,고양이,개,뱀” 이라는 데이터가 있다면 label encoding을 통해서 1,2,3,4,2,1,4 로 변환하는 것입니다. (개:1, 고양이:2, 사자:3, 뱀:4)

One-hot encoding


one-hot encoding은 클래스들을 벡터화한다고 보면 됩니다. 이때, 자신을 나타내는 값은 1로 나머지는 0으로 바꾸게 되는데, 예를 들면 다음과 같습니다.

  • 개 : [1,0,0,0]
  • 고양이:[0,1,0,0]
  • 사자:[0,0,1,0]
  • 뱀:[0,0,0,1]

따라서 “개,고양이,사자,뱀,고양이,개,뱀” 의 클래스 데이터들이 있다면

개 [ [1,0,0,0]

고양이 [0,1,0,0]

사자 [0,0,1,0]

뱀 [0,0,0,1]

고양이 [0,1,0,0]

개 [1,0,0,0]

뱀 [0,0,0,1] ]

이런 식의 7x4의 2차원 행렬의 one-hot encoding이 이루어지게 될겁니다.

label encoding과 one-hot encoding을 둘 다 알아야 하는 이유는 뭘까?


label encoding은 숫자의 크기에 따라서 머신러닝 학습에 영향을 끼치는 치명적인 단점이 있습니다. 위의 예제에서 개:1, 고양이:2, 사자:3, 뱀:4를 생각해봅시다. 뱀이 개보다 더 큰 값을 갖기 때문에, 머신러닝 모델은 뱀이 더 중요하다고 판단하여 모든 클래스를 뱀으로 분류해버릴지도 모릅니다. (특히 weighted 학습을 할때 특히 큰 문제가 됩니다.) 그러나 one-hot encoding을 사용하면, 이런 문제가 사라지게 됩니다.

그러면 label encoding은 필요하지 않은 것인가? 라고 생각할 수 있는데, 트리 계열의 ML알고리즘은 숫자의 크기 같은 특성을 반영하지 않으므로 간단하게 label encoding으로 학습을 할 수 있기 때문에, 이럴 때 종종 사용된다고 합니다.

1 분 소요