[데이터전처리] 레이블 인코딩(Label Encoding) 기법

    데이터의 레이블(Label)들을 보면 숫자로 되어 있어서 그대로 사용할 수 있는 데이터가 있는 반면 대다수는 문자열 형태로 되어 있어서 한번 변환을 거쳐야 되는 경우가 많다. 레이블의 경우 의미가 없는 숫자보다는 문자형태로 되어 있어야 의미를 파악하기 쉽고 나중에 데이터를 검증하기도 용이하면 더 나아가 가시화(Visualization)등을 할 때에도 유리하다.

     

    이 레이블을 숫자로 변경하는 방법은 우리가 직접 코드를 짜도 되고 크게 어려운 기술이 아니지만 이미 라이브러리(Library)가 존재하고 있는 상태이기 때문에 굳이 힘들게 짤 필요는 없을 것 같다. 이렇게 문자열 데이터를 숫자 형태로 레이블을 변환해주는 것을 레이블 인코딩이라고 하는데 사이킷런(scikit learn, sklearn)에서는 레이블 인코딩을 쉽게 해주는 레이블인코더(LabelEncoder)라는 함수를 제공한다.

     

    데이터 전처리, 레이블 인코딩(Label Encoding)


    코드설명

    from sklearn.preprocessing import LabelEncoder
    
    # 레이블 데이터
    input_labels = ['삼성전자','애플','테슬라','페이스북','넷플릭스']

    사이킷런에 있는 LabelEncoder를 불러오며, 삼성전자, 애플, 테슬라, 페이스북, 넷플릭스라는 데이터를 리스트 형태로 input_labels 변수에 담는다.

     

    # 레이블 인코더 객체 생성
    encoder = LabelEncoder()
    
    # 레이블 학습
    encoder.fit(input_labels)

    인코더 객체를 encoder 명으로 생성 후, input_labels 리스트 데이터를 학습한다.

     

    # print labels
    for i, label in enumerate(encoder.classes_):
        print(i, '->', label)
        
    # 
    0 -> 넷플릭스
    1 -> 삼성전자
    2 -> 애플
    3 -> 테슬라
    4 -> 페이스북

     

     

    학습이 완료 되었으면, encoder에 학습된 문자형 레이블과 숫자형 레이블을 화면에 출력한다.

     

    # 문자를 레이블로 변환
    test_labels = ['넷플릭스','테슬라']
    print(test_labels, '->', encoder.transform(test_labels))
    
    # ['넷플릭스', '테슬라'] -> [0 3]

    tes 레이블을 만들고, encoder 변환 메소드에 레이블 데이터를 던지면, 변환된 숫자값이 출력된다. 넷플릭스와 테슬라가 각각 0과 3으로 변환된 것을 알 수 있다.

     

    # 숫자를 문자로 변환, 디코딩
    encode_datas = [2, 4, 1]
    print(encode_datas, '->', encoder.inverse_transform(encode_datas))
    
    # [2, 4] -> ['애플' '페이스북' '삼성전자']

    inverse_transform을 사용하면 반대로 encoding된 데이터를 decoding 하려 출력해준다. 2, 4, 1의 값이 각각 애플과 페이스북, 삼성전자로 변환된 것을 알 수 있다. 

     

    이렇게 변환된 값을 그대로 학습해서 사용해도 되고, 학습 시 원핫 인코딩이 필요한 경우라면 다시 이 값을 원핫 인코딩을 해주는 메소드에 전달해서 변형할 수 있다.

     

     

    댓글

    Designed by JB FACTORY