이번 포스팅은
정수, 실수가 아닌 범주형 데이터(Categorical Data)에 대해서
수치형 데이터(Numeric data)로 변환하는
전처리 방법에 대해서
학습해보겠습니다.
1. 변환 이유?
제가 사용하는
keras의 Sequential 모델은
수치 데이터로만
학습이 가능하기 때문이었습니다.
범주형(문자) 데이터가 학습 데이터로
들어가게 되면 오류가 발생합니다.
그렇기 때문에 전처리 단계에서
범주형 데이터를 수치형으로
변환하는 방식이 필요했습니다.
2. 변환하기
Scikit-Learn 의 preprocessing 모듈의
OneHotEncoder()
LabelEncoder()
이 두가지를 사용해보겠습니다.
1) OneHotEncoder()
해당 포스터에서 한번 다뤘었죠?ㅎㅎ
https://aigaeddo.tistory.com/24
20. 분류2) 다중 분류 파헤치기(Multiclass Classification)
이번 포스팅은 이전 포스팅에 이어 다중분류(Multiclass Classification)에 대해서 파헤쳐보겠습니다. 해당 포스팅을 참고해서 학습하겠습니다. https://yhyun225.tistory.com/14 분류 (3) - 다중 분류(Multiclass Clas
aigaeddo.tistory.com
다중분류에서
[1, 2, 3] 이라는 데이터가 있으면
[100], [010], [001] 이런 식으로 Encoding 해줌으로서
softmax 엑티베이션을 거친 데이터와의 loss비교를 해가며
학습이 가능하게 했죠.
이번엔 범주형 데이터 측면에서 설명해보겠습니다.
animal이란 특성에
['개',"말", "소", "고양이", "공룡"] 란
범주형 데이터가 있다고 하면
이 글자를 학습시킬 수 없는 상황입니다.
그래서 해당 데이터를
개는 [10000]
말은 [01000]
소는 [00100]
고양이는 [00010]
공룡은 [00001]
로 변환해주면 수치 데이터화가 가능합니다!
사용해보겠습니다.
인코딩 전후를 찍어보면
범주형 데이터가 수치형으로 변환이 잘 되었습니다.
실제로는 인코딩 방식이
sort 후 변환이 되는군요??
from sklearn.preprocessing import OneHotEncoder
animal = [['개'],["말"], ["소"], ["고양이"], ["공룡"]] #행렬 형태로 생성
print(animal)#[['개'], ['말'], ['소'], ['고양이'], ['공룡']]
onehot_animal = OneHotEncoder(sparse_output=False).fit_transform(animal)
print(onehot_animal)
'''
[[1. 0. 0. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]]
'''
2) LabelEncoder()
레이블 인코더는 좀더 직관적으로
범주형 데이터를 수치형 데이터로 변경해줍니다.
마찬가지로 ['개',"말", "소", "고양이", "공룡"] 이라는 데이터가 있다면
개: 0
말 : 1
소: 2
고양이 : 3
공룡:4
이런식으로 변환해줍니다.
사용해볼게요.
\
마찬가지로 sort가 되어 변환이 되는군요.
from sklearn.preprocessing import LabelEncoder
#LabelEncoder
animal = ['개',"말", "소", "고양이", "공룡"]
print(animal)#['개', '말', '소', '고양이', '공룡']
label_e_animal = LabelEncoder().fit_transform(animal)
print(label_e_animal)#[0 3 4 1 2]
3. 선택방법
두 인코딩 방식 중 뭐가 더 좋을까요?
상황에 따라 다릅니다.
레이블 인코더는 순서가 있는 범주형 데이터에
적합하다고 합니다.
또한 간단하고 효율적인 방식이라고 합니다.
반대로 원핫 인코더는
순서가 상관 없는 데이터에 적합하다고 하네요.
다만, 범주의 수가 많을 경우 데이터의 차원이 크게
증가하는 단점이 있다고 합니다.
이런 장단점을 잘 선택해서
효율적으로 사용해줘야겠습니다.
이상 범주형데이터를
수치형 데이터로 변경하는 방식에 대해서
학습해봤습니다.
틀린점이 있다면 지적 부탁드립니다!
'인공지능 개발하기 > Machine Learning' 카테고리의 다른 글
[Tensorflow] 23. 모델(Model) 구조와 가중치(Weights) 저장하기, 불러오기 (0) | 2024.01.20 |
---|---|
[Tensorflow] 22. 데이터 스케일링(Data Scaling) (0) | 2024.01.20 |
[Tensorflow] 20. 다중 분류(Multiclass Classification) (1) | 2024.01.13 |
[Tensorflow] 19. 이진분류(Binary Classification) (0) | 2024.01.13 |
[Tensorflow] 18. keras EarlyStopping() 사용해보기 (2) | 2024.01.13 |