여러가지공부/머신러닝(Machine Learning)

[Python] 원핫인코딩(One Hot Encoding)이란? 쉬운 예제로 실습하기

끄적끄적아무거나 2023. 3. 30. 08:07
반응형

 

목차

     

     

     

     

     

     

     

    원핫인코딩(One Hot Encoding)이란?

     

    원 핫 인코딩(One Hot Encoding)은 카테고리 변수(Categorical Variable)를 머신러닝에서 처리할 수 있는 Binary 벡터(Vector) 값으로 변환해주는 방법을 말 합니다. 

     

     

    선형 회기 예를 들어 설명하겠습니다.

     

    수식1

     

     

    위 수식1은 다중 선형 회기 수식입니다. X, Y 값은 사용자가 가지고 있는 데이터 셋의 값입니다. 만일 입력 값 중에 하나가 색상의 값으로 빨강, 노랑, 파랑 색으로 들어오면 해당 입력은 범주형 변수(Categorical variable)이므로 Binary로 변환해야 합니다. 

     

    그래서 아래와 같이 표현할 수 있습니다.

     

    빨강 [1 0 0], 파랑 [0 1 0], 노랑 [0 0 1] 로 벡터 값으로 변환해서 처리 할 수 있습니다.

     

    다음으로 중요한 원핫 인코딩의 특성은 벡터 값은 Orthogonal 해야 합니다. 즉, 결과 벡터 간에 직교성을 가져서 독립적인 값을 가져야 하는 것입니다. [0 0 1], [0 1 1]과 같은 값을 가지면 안됩니다. 

     

     

    로지스틱 회귀나 소프트멕스 머신러닝 방식에서 Binary Vector 출력을 받는 경우 원핫인코딩을 유용하게 사용할 수 있습니다.

     

     

     

     

     

     

     

    파이썬 IRIS 데이터셋으로 원핫인코딩 예제 실습

     

    IRIS 데이터셋 사용방법 및 데이터셋(Dataset)에 대한 설명은 링크를 참조하시면 됩니다(https://scribblinganything.tistory.com/678).

     

     

    예제 코드>>

    import pandas as pd
    
    iris_data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', 
                       header=None, names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species'])
    
    print(iris_data)
    
    iris_encoded = pd.get_dummies(iris_data, columns=['species'])
    
    print(iris_encoded)

     

    3번 라인: 웹에 저장된 iris 값을 불러 옵니다.

    6번 라인: 원 핫 인코딩(One Hot Encoding) 적용 전 값을 출력 합니다.

    8번 라인: get_dummies 함수를 사용해서 species의 값을 binary vector로 변경합니다.

    10번 라인: 원 핫 인코딩(One Hot Encoding) 적용 후 값을 출력 합니다.

     

     

    결과>>

         sepal_length  sepal_width  petal_length  petal_width         species
    0             5.1          3.5           1.4          0.2     Iris-setosa
    1             4.9          3.0           1.4          0.2     Iris-setosa
    2             4.7          3.2           1.3          0.2     Iris-setosa
    3             4.6          3.1           1.5          0.2     Iris-setosa
    4             5.0          3.6           1.4          0.2     Iris-setosa
    ..            ...          ...           ...          ...             ...
    145           6.7          3.0           5.2          2.3  Iris-virginica
    146           6.3          2.5           5.0          1.9  Iris-virginica
    147           6.5          3.0           5.2          2.0  Iris-virginica
    148           6.2          3.4           5.4          2.3  Iris-virginica
    149           5.9          3.0           5.1          1.8  Iris-virginica
    
    [150 rows x 5 columns]
         sepal_length  sepal_width  petal_length  petal_width  species_Iris-setosa  species_Iris-versicolor  species_Iris-virginica
    0             5.1          3.5           1.4          0.2                    1                        0                       0
    1             4.9          3.0           1.4          0.2                    1                        0                       0
    2             4.7          3.2           1.3          0.2                    1                        0                       0
    3             4.6          3.1           1.5          0.2                    1                        0                       0
    4             5.0          3.6           1.4          0.2                    1                        0                       0
    ..            ...          ...           ...          ...                  ...                      ...                     ...
    145           6.7          3.0           5.2          2.3                    0                        0                       1
    146           6.3          2.5           5.0          1.9                    0                        0                       1
    147           6.5          3.0           5.2          2.0                    0                        0                       1
    148           6.2          3.4           5.4          2.3                    0                        0                       1
    149           5.9          3.0           5.1          1.8                    0                        0                       1
    
    [150 rows x 7 columns]

     

    species 값이 binary vector 값으로 변경 되었습니다.

    반응형