본문 바로가기
Computer Science/DL & ML

One-Hot Encoding이란

by tabasco 2023. 7. 3.

오늘은 ML/DL에서 데이터 전처리 시 활용하는 One-Hot Encoding에 대해 알아보겠습니다.

 

개념

One-hot 인코딩은 머신러닝에서 범주형 데이터를 처리할 때 자주 사용되는 기법입니다. 이는 범주형 변수를 컴퓨터가 이해할 수 있는 형태로 변환하는 방법 중 하나입니다.

머신러닝 알고리즘들은 대부분 숫자를 입력으로 받습니다. 그러나 많은 데이터셋들은 숫자가 아닌 범주형 데이터, 예를 들어 '붉은', '파란', '녹색'과 같은 색상 레이블 또는 '고양이', '개', '토끼' 등의 동물 범주를 포함하고 있을 수 있습니다.

One-hot 인코딩은 이러한 범주형 데이터를 0과 1로 이루어진 벡터로 변환합니다. 범주 각각에 대해 고유한 이진 벡터를 생성하며, 해당 범주에 해당하는 요소는 1이고, 나머지 요소는 모두 0입니다.

예를 들어, '고양이', '개', '토끼'라는 세 가지 범주가 있다고 해봅시다. One-hot 인코딩을 적용하면 이 범주들은 다음과 같이 변환될 수 있습니다.

고양이: [1, 0, 0]
개: [0, 1, 0]
토끼: [0, 0, 1]

 

그럼 고양이는 1, 개는 2, 토끼는 3으로 입력해서 처리하면 되지 않나요?

 

위처럼 index형태로 범주를 분류하게 되면, 시스템 입장에서 이들간의 연속성 또는 계층이 있다고 인지할 수 있습니다.
이는 학습 성능을 떨어뜨릴 수 있습니다. 이 때문에 One Hot Encoding을 사용하는 이유이기도 합니다.

 

왜 사용해야하나?


One-hot 인코딩이 필요한 이유는 머신러닝 알고리즘들이 숫자로 된 특성을 입력으로 받기 때문입니다. 따라서 범주형 데이터를 이러한 방식으로 변환함으로써 머신러닝 알고리즘이 해당 데이터를 올바르게 이해하고 학습할 수 있게 합니다.

그러나 One-hot 인코딩에는 주의해야 할 점도 있습니다. 범주의 수가 많을 경우 벡터의 차원이 크게 늘어나게 되어, 이를 '차원의 저주'라고 부르는 문제를 초래할 수 있습니다. 이런 경우에는 다른 방법들(예를 들어, embedding이나 feature hashing)을 고려할 수 있습니다.

 

관련 코드

#사이킷런의 ColumnTransformer와 OneHotEncoder를 이용해 parameter를 인코딩 하는 과정입니다.

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

ct = ColumnTransformer(transformers=[('encoding',OneHotEncoder(), [0])], remainder='passthrough')

#파라미터의 경우 numpy array 형태가 되어야 하기 때문에 형식을 맞춰줍니다.
x = np.array(ct.fit_transform(x))
#사이킷런의 LabelEncoder를 이용해 종속변수를 OneHotEncoding 해줄 수 있습니다.

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()

#종속변수는 np.array가 될 필요가 없습니다.
y = le.fit_transform(y)

'Computer Science > DL & ML' 카테고리의 다른 글

Feature Scaling이란?  (0) 2023.07.04