-
[scikit-learn] 사이킷런 라벨 인코딩을 이용한 전처리 (python LabelEncoder)Python/기계학습 2023. 10. 10. 10:27반응형
사이킷런 라벨 인코딩을 이용한 전처리 알아보기 (python scikit-learn LabelEncoder)
파이썬(Python)으로 기계학습(Machine Learning)을 하다보면 데이터를 숫자로 표기해야 할 때가 많습니다. 이 세상의 모든 데이터가 숫자로 잴 수 있다면 이야기가 편해지겠지만, 아쉽게도 문자로 분류된 카테고리형 데이터(Categorical Data)가 있기 때문에 이런 데이터는 전처리(Pre-Processing)를 해 줘야 합니다.
그래서, 이번에 알아볼 전처리 방법은 사이킷런(sklearn)에서 제공하는 전처리 도구인 라벨인코더(LabelEncoder)입니다. 이 도구는 문자 분류를 숫자 분류로 치환해주는 단순한 기능인데요, 이 라벨 인코딩이라는 작업은 은근히 손이 많이 가는 작업이기 때문에 자동으로 해결해 준다면 작업자 입장에서는 아주 편리해진답니다.
라벨 인코딩은 기본적으로 아래 절차에 따라서 진행됩니다.
가위
,나비
,다람쥐
라는 데이터가 있을 때,가위
=1
,나비
=2
,다람쥐
=3
이라는 규칙을 만들고- 데이터를
1
,2
,3
으로 변환한다. - 필요하면, 이 규칙을 이용해서 반대로 변환할 수도 있다!
라벨 인코딩
그러면 이제 사이킷런 라벨인코더를 이용해서 파이썬으로 라벨 인코딩을 해 보도록 하겠습니다. 데이터는 많은 분들이 한번쯤 사용해 봤을 법한 아이리스(iris) 데이터를 이용해 보겠습니다.
# 패키지 불러오기 from sklearn.preprocessing import LabelEncoder import seaborn as sns import pandas as pd # 라벨인코더 이용을 위한 초기화 enc = LabelEncoder() # 데이터 불러오기 iris = sns.load_dataset('iris') iris.head()
sepal_length sepal_width petal_length petal_width species 0 5.1 3.5 1.4 0.2 setosa 1 4.9 3.0 1.4 0.2 setosa 2 4.7 3.2 1.3 0.2 setosa 3 4.6 3.1 1.5 0.2 setosa 4 5.0 3.6 1.4 0.2 setosa iris['species'] 정보는 원래 카테고리형 데이터입니다 각 분류는
setosa
,versicolor
,virginica
로 나뉘어져 있으며, 이걸 숫자로 라벨링해 보도록 하겠습니다.LabelEncoder
는 다른 사이킷런 기계학습 모듈과 마찬가지로fit
함수를 이용해서 데이터를 입력할 수 있는데요, 이후transform
함수를 이용하면 입력된 데이터와 같은 규칙으로 라벨링을 하게 됩니다.enc.fit(iris['species'])
LabelEncoder()
iris['species_bin'] = enc.transform(iris['species']) iris
sepal_length sepal_width petal_length petal_width species species_bin 0 5.1 3.5 1.4 0.2 setosa 0 1 4.9 3.0 1.4 0.2 setosa 0 2 4.7 3.2 1.3 0.2 setosa 0 3 4.6 3.1 1.5 0.2 setosa 0 4 5.0 3.6 1.4 0.2 setosa 0 ... ... ... ... ... ... ... 145 6.7 3.0 5.2 2.3 virginica 2 146 6.3 2.5 5.0 1.9 virginica 2 147 6.5 3.0 5.2 2.0 virginica 2 148 6.2 3.4 5.4 2.3 virginica 2 149 5.9 3.0 5.1 1.8 virginica 2 인코딩된 데이터 복구하기
만약, 숫자로 변형된 데이터를 다시 문자로 변형하고 싶다면
inverse_transform
함수를 이용해 복구할 수 있습니다. 이렇게 복구된 데이터는 기존 데이터와 일치하기 때문에, 사전에 데이터를 입력한enc
변수만 보존되어 있다면 추후 기계학습 모델이 분류한 정보를 우리가 보기 편하게 변경할 수 있겠지요.iris['species_inv'] = enc.inverse_transform(iris['species_bin']) iris['species'] == iris['species_inv']
0 True 1 True 2 True 3 True 4 True ... 145 True 146 True 147 True 148 True 149 True Length: 150, dtype: bool
반응형'Python > 기계학습' 카테고리의 다른 글
[scikit-learn] 사이킷런 레이블인코더, 원-핫 인코더로 기계학습 데이터 전처리하기 (0) 2024.03.13 [scikit-learn] GMM 클러스터링을 이용한 파이썬 군집분류 모델 (1) 2023.09.08 [scikit-learn] 파이썬 선형회귀(Linear regression)로 게 나이 예측하기 (0) 2023.08.14