학부 수업/머신러닝

2. 데이터 실수화 (Data Vectorization)

백지오 2020. 9. 11. 17:10
반응형
이 글의 실습 코드는 제 깃허브에서 보실 수 있습니다.

데이터 실수화

범주형 데이터의 실수화

$n$개의 클래스로 구성된 범주형 데이터의 실수화는 one-hot encoding을 사용하여 할 수 있다.

id City
1 Seoul
2 Tokyo
3 New York

각 클래스에 대응하는 행을 만들어, 해당하는 행에 1 데이터를 담아준다.

id City_Seoul City_Tokyo City_NewYork
1 1 0 0
2 0 1 0
3 0 0 1

Scikit-learn의 DictVectorizer 클래스

사이킷런 라이브러리의 DictVectorizer 클래스를 활용하여 범주형 데이터를 실수화할 수 있다.

from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False)
vec.fit_transform(x) # x를 one-hot encoding

DictVectorizer의 sparse를 True로 설정하면 CSR 표현식으로 데이터가 압축되어 더 적은 메모리로 저장할 수 있지만, 변환된 데이터를 확인할 수 없다.

텍스트 자료형의 실수화

텍스트 자료형도 범주형 자료와 비슷하게 실수화할 수 있다. 아래는 빈도를 이용해 문장을 실수화 한 예시이다.

떴다 떴다 비행기 날아라 날아라
  떴다 비행기 날아라
빈도 2 1 2

그러나, 등장 빈도가 항상 단어의 중요도와 비례하는 것은 아니므로, TF-IDF(Term Frequency Inverse Document Frequency) 기법을 활용해야 한다.

TF-IDF 기법은 자주 등장하지만 분석에 의미를 갖지 못하는 단어(a, the 등)의 중요도를 낮추는 기법이다.

CountVectorizer 클래스

사이킷런을 활용하여 빈도 기반 실수화를 할 수 있다.

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer() # Sparse=True
t = vec.fit_transform(text).toarray() # toarray() 함수로 sparse 해제
# 판다스로 출력
import pandas as pd
tl = pd.DataFrame(t, columns=vec.get_feature_names())
tl

TfidfVectorizer 클래스

사이킷런을 활용한 TF-IDF 실수화. 빈도가 낮을 수록 높은 가중치를 할당한다.

from sklearn.feature_extraction.text import TfidfVectorizer
tfid = TfidfVectorizer()
x = tfid.fit_transform(text).toarray()

 

반응형