[데이터 사이언스/개념/문법] oneHotCoding이란?

2024. 8. 16. 19:38데이터 사이언스

 

 

OneHotEncoder를 사용하여 범주형 데이터를 원-핫 인코딩하면,
범주형 데이터를 머신 러닝 모델이 직접 사용할 수 있는 형태로 변환할 수 있습니다.

이는 모델 성능 향상에 기여하며, 다양한 알고리즘과의 호환성을 보장합니다.
다만, 차원의 증가와 메모리 사용량에 주의해야 합니다.

 

One-Hot Encoding이란?

  • One-Hot Encoding은 범주형 데이터를 이진 벡터(binary vector)로 변환하는 방법입니다.
  • 각 범주형 값은 하나의 고유한 이진 벡터로 변환됩니다.
  • 벡터의 길이는 해당 범주형 변수의 고유한 값의 개수와 같고, 특정 범주에 해당하는 위치는 1, 나머지 위치는 0으로 설정됩니다.
    • 예를 들어, ['red', 'green', 'blue']라는 범주형 변수를 원-핫 인코딩하면 다음과 같은 결과가 됩니다
      • red -> [1, 0, 0]
      • green -> [0, 1, 0]
      • blue -> [0, 0, 1]

코드 설명

from sklearn.preprocessing import OneHotEncoder

# OneHotEncoder 객체 생성
cat_transformer = OneHotEncoder(handle_unknown='ignore')

OneHotEncoder(handle_unknown='ignore') 파라미터 설명

handle_unknown='ignore'
  • 데이터셋에 없는 새로운 범주형 값이 등장했을 때 이를 무시하도록 설정합니다.
  • 예를 들어, 훈련 데이터에는 없었지만 테스트 데이터에 새로운 범주형 값이 등장할 경우, 해당 값을 무시하고 인코딩합니다. 이를 통해 예기치 않은 오류를 방지할 수 있습니다.

예시

원본 데이터

import pandas as pd

# 예시 데이터프레임
df = pd.DataFrame({
    'color': ['red', 'green', 'blue', 'green', 'red']
})

print("Original DataFrame:")
print(df)

One-Hot Encoding 적용

from sklearn.preprocessing import OneHotEncoder

# OneHotEncoder 객체 생성
encoder = OneHotEncoder(handle_unknown='ignore')

# 원-핫 인코딩 수행
encoded_data = encoder.fit_transform(df[['color']]).toarray()

print("\\\\nOne-Hot Encoded Data:")
print(encoded_data)

출력 결과

Original DataFrame:
    color
0     red
1   green
2    blue
3   green
4     red

One-Hot Encoded Data:
[[0. 1. 0.]
 [1. 0. 0.]
 [0. 0. 1.]
 [1. 0. 0.]
 [0. 1. 0.]]

설명

fit_transform(df[['color']])
  • fit_transform 메서드는 주어진 데이터에 대해 원-핫 인코딩을 수행합니다.
  • fit 단계에서는 데이터를 학습하고, transform 단계에서는 학습된 정보를 바탕으로 데이터를 변환합니다.
  • 결과는 희소 행렬(sparse matrix) 형태로 반환되기 때문에, 이를 배열 형태로 변환하기 위해 toarray()를 사용했습니다.
  • 결과 해석:
    • red -> [0, 1, 0]
    • green -> [1, 0, 0]
    • blue -> [0, 0, 1]
    • 원본 데이터의 color 열이 이진 벡터로 변환되었습니다.

원-핫 인코딩의 장점

모델 성능 향상
  • 원-핫 인코딩을 통해 범주형 데이터를 수치 데이터로 변환하면, 머신 러닝 모델이 이 데이터를 직접 사용할 수 있게 됩니다.
거리 기반 알고리즘에 유용
  • KNN, SVM 등의 거리 기반 알고리즘은 수치 데이터를 필요로 하므로, 원-핫 인코딩을 통해 범주형 데이터를 적절히 변환할 수 있습니다.
다양한 모델과의 호환성
  • 원-핫 인코딩은 대부분의 머신 러닝 알고리즘과 호환됩니다.

한계 및 주의점

차원의 증가
  • 범주형 변수의 고유 값이 많을 경우, 원-핫 인코딩으로 인해 차원이 크게 증가할 수 있습니다.
  • 예를 들어, 범주가 100개라면, 해당 변수는 100개의 열로 변환됩니다.
희소 행렬
  • 원-핫 인코딩의 결과는 대부분의 값이 0인 희소 행렬이 됩니다.
  • 큰 데이터셋에서 메모리 사용량을 주의해야 합니다.