One Hot Encoding

활률값으로 나온 벡터를 0,1로 표현해 주는 원핫 엔코딩에 대한 설명입니다.

확률값으로 나온 벡터를 0과 1로 표현하는 원핫 인코딩은 범주형 데이터를 다룰 때 사용하는 인코딩 방법 중 하나입니다. 각 범주(category)마다 새로운 이진 벡터를 만들어 해당 범주에 해당하는 인덱스는 1로, 그 외에는 모두 0으로 만들어주는 방식입니다.

예를 들어, 색깔을 범주형 변수로 가정하고, “빨강”, “녹색”, “파랑” 세 가지의 색깔이 있다고 합시다. 이를 원핫 인코딩을 사용하여 0과 1로 표현하면 아래와 같습니다.

색깔 빨강 녹색 파랑
빨강 1 0 0
녹색 0 1 0
파랑 0 0 1

위와 같이 범주의 개수만큼의 차원을 가진 이진 벡터를 만들어 각 범주에 해당하는 인덱스는 1로, 그 외에는 모두 0으로 만들어줍니다.

corlab에서 실행 가능한 코드는 다음과 같습니다.

#One Hot Encoding

import numpy as np

# 범주형 변수의 값
colors = ['빨강', '녹색', '파랑', '파랑', '빨강', '초록']

# 중복 제거한 범주 목록
categories = list(set(colors))

# 범주 수 만큼의 차원을 가진 이진 벡터 생성
one_hot = np.zeros((len(colors), len(categories)))

# 해당 범주의 인덱스에만 1 할당
for i, color in enumerate(colors):
    j = categories.index(color)
    one_hot[i, j] = 1

print(one_hot)

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]
 [0. 0. 1.]
 [1. 0. 0.]
 [0. 1. 0.]]

위 출력 결과에서 각 행이 원핫 인코딩된 범주를 나타냅니다. 첫 번째 행은 “빨강”을 나타내며, 이에 해당하는 첫 번째 열만 1이고 나머지는 모두 0입니다.

아직 이해가 안되시나요?

다시 쉽게 설명해 보겠습니다.

One Hot Encoding은 범주형 데이터를 수치형 데이터로 변환하는 방법 중 하나입니다. 이 방법은 각 범주마다 하나의 이진 변수를 만들어 해당 범주에 속하면 1, 속하지 않으면 0으로 표시하는 방식입니다.

예를 들어, 성별을 나타내는 범주형 데이터가 있다고 가정해보겠습니다. 이 데이터는 “남성”과 “여성” 두 가지 범주로 구성되어 있습니다. One Hot Encoding을 적용하면 “남성” 범주에 해당하는 변수와 “여성” 범주에 해당하는 변수를 각각 만들어 해당하는 범주에는 1, 해당하지 않는 범주에는 0으로 표시합니다.

이러한 방식은 범주형 데이터를 수치형 데이터로 변환하기 때문에 다양한 머신러닝 알고리즘에서 적용할 수 있습니다. 또한 이진 변수로 표현되기 때문에 데이터의 차원이 매우 커질 수 있습니다. 그러나 이러한 차원의 증가는 일반적으로 희소 행렬(sparse matrix) 문제를 야기할 수 있습니다. 따라서 One Hot Encoding을 적용할 때는 주의해야 합니다.

예를 들어, “남성”과 “여성” 외에도 다양한 범주가 있는 경우, 모든 범주에 대한 이진 변수를 만들어 차원을 크게 늘리는 것은 비효율적일 수 있습니다. 이 경우에는 다른 인코딩 방법을 고려해야 합니다.