머신러닝의 레이블 인코딩 = scikit-learn
머신러닝에서 카테고리형 데이터 처리 방법
머신러닝을 활용할 때, 종종 데이터에서 문자형(char)이나 문자열(string) 값이 포함된 카테고리형 데이터가 등장하게 됩니다. 이러한 데이터를 바로 모델에 적용하려면 문제가 발생할 수 있습니다. 머신러닝 모델은 숫자형 데이터를 선호하기 때문에, 카테고리형 데이터를 숫자형 값으로 변환하는 과정이 필요합니다.
이 블로그에서는 카테고리형 데이터를 숫자형으로 변환하는 방법에 대해 살펴보겠습니다. scikit-learn 라이브러리의 다양한 기능을 이용해 손쉽게 해결할 수 있습니다.
1. 레이블 인코딩(Label Encoding)
먼저, **레이블 인코딩(Label Encoding)**을 통해 카테고리형 데이터를 숫자형 값으로 변환할 수 있습니다. 레이블 인코딩은 각 고유한 값을 숫자로 매핑하여 각 범주를 고유한 정수로 변환하는 방법입니다. 예를 들어, 'red', 'green', 'blue'라는 색깔을 각각 0, 1, 2로 변환할 수 있습니다.
scikit-learn의 LabelEncoder 클래스를 사용하면 이 작업을 매우 쉽게 처리할 수 있습니다.
from sklearn.preprocessing import LabelEncoder
# 레이블 인코더 객체 생성
le = LabelEncoder()
# 데이터를 학습
le.fit(x[:, 0])
# 변환된 데이터를 새로운 변수에 저장
new_x = le.transform(x[:, 0])
# 결과 출력
print(new_x)
2. 원-핫 인코딩 (One-Hot Encoding)
**원-핫 인코딩(One-Hot Encoding)**은 카테고리형 데이터에 대해 새로운 이진(0 또는 1) 열을 추가하여, 각 고유 값에 해당하는 열에만 1을 표기하고 나머지 열은 0을 표기하는 방식입니다.
이 방법은 순서가 없는 카테고리형 데이터에 적합하며, 각 카테고리의 상호 의존성이 없을 때 유용합니다. 예를 들어, 'red', 'green', 'blue'가 있을 때 각각을 3개의 새로운 열로 분리하여 고유 값에 해당하는 곳에 1을 넣습니다.
원-핫 인코딩 구현 방법
(1) scikit-learn의 OneHotEncoder 사용
scikit-learn의 OneHotEncoder 클래스를 사용하면, 카테고리형 데이터를 원-핫 인코딩 형식으로 쉽게 변환할 수 있습니다.
from sklearn.preprocessing import OneHotEncoder
# OneHotEncoder 객체 생성
encoder = OneHotEncoder()
# 카테고리형 데이터에 적용
new_x = encoder.fit_transform(x).toarray()
# 결과 출력
print(new_x)
(2) pandas의 get_dummies() 메서드 사용
또한, pandas에서 제공하는 get_dummies() 메서드를 사용하여 숫자형 변환 없이 바로 원-핫 인코딩을 수행할 수 있습니다. 이 방법은 pandas DataFrame 형식에서 매우 간편하게 사용할 수 있습니다.
import pandas as pd
# 데이터프레임 예시
df = pd.DataFrame({'color': ['red', 'green', 'blue', 'green', 'red']})
# 원-핫 인코딩
one_hot = pd.get_dummies(df['color'])
# 결과 출력
print(one_hot)
3. 카테고리형 데이터 전처리 흐름
일반적으로 카테고리형 데이터 처리 순서는 다음과 같습니다:
- **레이블 인코딩(Label Encoding)**을 통해 범주형 데이터를 숫자형으로 변환합니다.
- 그 후, **원-핫 인코딩(One-Hot Encoding)**을 적용하여 각 범주를 별도의 이진 특성으로 변환합니다.
이 두 가지 방법을 사용하면, 머신러닝 모델이 이해할 수 있는 형태로 카테고리형 데이터를 처리할 수 있습니다.
4. 결론
카테고리형 데이터는 머신러닝 모델에 적합한 형태로 변환해야 하기 때문에, 레이블 인코딩과 원-핫 인코딩은 매우 중요한 데이터 전처리 단계입니다. scikit-learn과 pandas는 이러한 작업을 매우 간편하게 처리할 수 있는 기능들을 제공합니다. 모델링 전에 데이터를 적절히 처리하는 것이 모델 성능에 큰 영향을 미치므로, 이들 기법을 잘 활용해 보세요.