데이터의 레이블(Label)들을 보면 숫자로 되어 있어서 그대로 사용할 수 있는 데이터가 있는 반면 대다수는 문자열 형태로 되어 있어서 한번 변환을 거쳐야 되는 경우가 많다. 레이블의 경우 의미가 없는 숫자보다는 문자형태로 되어 있어야 의미를 파악하기 쉽고 나중에 데이터를 검증하기도 용이하면 더 나아가 가시화(Visualization)등을 할 때에도 유리하다.
이 레이블을 숫자로 변경하는 방법은 우리가 직접 코드를 짜도 되고 크게 어려운 기술이 아니지만 이미 라이브러리(Library)가 존재하고 있는 상태이기 때문에 굳이 힘들게 짤 필요는 없을 것 같다. 이렇게 문자열 데이터를 숫자 형태로 레이블을 변환해주는 것을 레이블 인코딩이라고 하는데 사이킷런(scikit learn, sklearn)에서는 레이블 인코딩을 쉽게 해주는 레이블인코더(LabelEncoder)라는 함수를 제공한다.
코드설명
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의 값이 각각 애플과 페이스북, 삼성전자로 변환된 것을 알 수 있다.
이렇게 변환된 값을 그대로 학습해서 사용해도 되고, 학습 시 원핫 인코딩이 필요한 경우라면 다시 이 값을 원핫 인코딩을 해주는 메소드에 전달해서 변형할 수 있다.
'인공지능 및 데이터과학 > 인공지능 기술' 카테고리의 다른 글
과적합을 해결하는 드롭아웃(Dropout)과 사용법 (0) | 2022.08.10 |
---|---|
[데이터전처리] 이진화(binarization), 크기조정(MinMaxScaler) (0) | 2021.06.21 |
희소 표현과 분산 표현, 차원의 저주 (0) | 2021.03.11 |
GAN(Generative Adversarial network)이란? (0) | 2021.01.28 |
[Python] 파이썬으로 얼굴의 특징값(Face Landmark) 가져오기 (0) | 2021.01.10 |