ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [scikit-learn] 사이킷런 라벨 인코딩을 이용한 전처리 (python LabelEncoder)
    Python/scikit-learn 2023. 10. 10. 10:27
    반응형

    사이킷런 라벨 인코딩을 이용한 전처리 알아보기 (python scikit-learn LabelEncoder)


    파이썬(Python)으로 기계학습(Machine Learning)을 하다보면 데이터를 숫자로 표기해야 할 때가 많습니다. 이 세상의 모든 데이터가 숫자로 잴 수 있다면 이야기가 편해지겠지만, 아쉽게도 문자로 분류된 카테고리형 데이터(Categorical Data)가 있기 때문에 이런 데이터는 전처리(Pre-Processing)를 해 줘야 합니다.

     

     

    그래서, 이번에 알아볼 전처리 방법은 사이킷런(sklearn)에서 제공하는 전처리 도구인 라벨인코더(LabelEncoder)입니다. 이 도구는 문자 분류를 숫자 분류로 치환해주는 단순한 기능인데요, 이 라벨 인코딩이라는 작업은 은근히 손이 많이 가는 작업이기 때문에 자동으로 해결해 준다면 작업자 입장에서는 아주 편리해진답니다.

     

     

    라벨 인코딩은 기본적으로 아래 절차에 따라서 진행됩니다.

     

     

    1. 가위 , 나비 , 다람쥐 라는 데이터가 있을 때,
    2. 가위 = 1 , 나비 = 2 , 다람쥐 = 3 이라는 규칙을 만들고
    3. 데이터를 1 , 2 , 3 으로 변환한다.
    4. 필요하면, 이 규칙을 이용해서 반대로 변환할 수도 있다!

     

     

    라벨 인코딩


    그러면 이제 사이킷런 라벨인코더를 이용해서 파이썬으로 라벨 인코딩을 해 보도록 하겠습니다. 데이터는 많은 분들이 한번쯤 사용해 봤을 법한 아이리스(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'])
     
    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
    반응형

    댓글

문의: jwkang3929@naver.com