학부 수업/머신러닝
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()
반응형