본문 바로가기
개발 Tools/파이썬_Deep learning & ML

머신러닝 preprocessing(데이터 전처리) ( classes_, LabelEncoder, get_dummies)

by 전컴반 2021. 7. 20.
반응형

데이터를 보면 대부분은 쓸 수 없습니다. 정렬되지 않은 게 이 세상의 데이터이죠,

데이터 사이언스는 이런 데이터를 정제하는 능력을 갖춰야 합니다.

이런 업무를 데이터 전처리라고 합니다. 분석하고자 하는 모든 건 숫자로 바꿔줘야 합니다. 문자는 인식할 수 없기 때문입니다. 

 

데이터 전처리에는 크게 두 가지가 있습니다.  

 

1. 레이블 인코딩

2. 원핫 인코딩

 

레이블 인코딩

 

먼저 라이브러리를 불러옵니다. 

 

from sklearn.preprocessing import LabelEncoder
import pandas as pd

 

예시를 리스트에 담아서 fit 시키고 transfrom 시켜보겠습니다.

 

items = ["tv", "냉장고", "컴퓨터", "전자레인지", "믹서", "선풍기", "믹서"]
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
print(labels)

출력
[0 1 5 4 2 3 2]

 

보면 items들이 숫자로 변환됐습니다.

 

tv는 0, 냉장고는 1, 컴퓨터는 5처럼 하나의 짝을 지어 변환됐습니다.

지금이야 양이 적지만, 만약 양이 많아진다면 확인하기 어렵습니다.

각 인덱스의 매칭을 알려주는 함수가 있습니다. "classes_"입니다.

 

print(encoder.classes_)

출력
['tv' '냉장고' '믹서' '선풍기' '전자레인지' '컴퓨터']

 

0, 1, 2, 3, 4, 5 이렇게 순서대로 매칭 돼 있다는 걸 알려줍니다.

 

다음으로는 당연히 디코딩을 할 수 있습니다.

 

print(encoder.inverse_transform([4, 5, 3, 2, 4, 2, 0, 1, 1]))

출력
['전자레인지' '컴퓨터' '선풍기' '믹서' '전자레인지' '믹서' 'tv' '냉장고' '냉장고']

 

"inverse_transform()"를 사용하여 내가 궁금한 인덱스 번호를 리스트 형태로 주면, 해당하는 문자열을 반환해줍니다.

 

 

원 핫 인코딩

 

저는 이 방법을 선호합니다. API의 형태입니다. 뜻은 하나만 1로 남기고 나머진 0으로 바꿉니다. 

 

함수는 "get_dummies()"를 사용하면 됩니다. 사용법이 간단합니다.

 

df = pd.DataFrame({'items': items})
print(df)
print(pd.get_dummies(df))

출력
0     tv
1    냉장고
2    컴퓨터
3  전자레인지
4     믹서
5    선풍기
6     믹서

   items_tv  items_냉장고  items_믹서  items_선풍기  items_전자레인지  items_컴퓨터
0         1          0         0          0            0          0
1         0          1         0          0            0          0
2         0          0         0          0            0          1
3         0          0         0          0            1          0
4         0          0         1          0            0          0
5         0          0         0          1            0          0
6         0          0         1          0            0          0

 

이렇게 열에 추가하여 사용합니다. 믹서를 보면 6, 4번 인덱스에만 1이 표기돼 있음을 알 수 있습니다.

 

 

반응형

댓글