비지도 학습 알고리즘: K-means 군집화
Bag of Words Meets Bags of Popcorn | Kaggle
튜토리얼 파트 3, 4
- DeepLearningMovies/KaggleWord2VecUtility.py at master · wendykan/DeepLearningMovies
- 캐글에 링크 되어 있는 github 튜토리얼을 참고하여 만들었으며 파이썬2로 되어있는 소스를 파이썬3에 맞게 일부 수정하였다.
첫 번째 시도(average feature vectors)
- 튜토리얼2의 코드로 벡터의 평균을 구한다.
두 번째 시도(K-means)
- Word2Vec은 의미가 관련 있는 단어들의 클러스터를 생성하기 때문에 클러스터 내의 단어 유사성을 이용하는 것이다.
- 이런 식으로 벡터를 그룹화하는 것을 "vector quantization(벡터 양자화)"라고 한다.
- 이를 위해서는 K-means와 같은 클러스터링 알고리즘을 사용하여 클러스터라는 단어의 중심을 찾아야 한다.
- 비지도 학습인 K-means를 통해 클러스터링하고 지도학습인 랜덤포레스트로 리뷰가 추천인지 아닌지를 예측한다.
import pandas as pd
import numpy as np
from gensim.models import Word2Vec
from sklearn.cluster import KMeans
from sklearn.ensemble import RandomForestClassifier
from bs4 import BeautifulSoup
import re
import time
from nltk.corpus import stopwords
import nltk.data
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
model = Word2Vec.load('300features_40minwords_10text')
model
# 숫자로 단어를 표현
# Word2Vec 모델은 어휘의 각 단어에 대한 feature 벡터로 구성되며
# 'syn0'이라는 넘파이 배열로 저장된다.
# syn0의 행 수는 모델 어휘의 단어 수
# 컬럼 수는 2부에서 설정한 피처 벡터의 크기
type(model.wv.syn0)
numpy.ndarray
# syn0의 행 수는 모델 어휘의 단어 수
# 열 수는 2부에서 설정한 특징 벡터의 크기
model.wv.syn0.shape
(11986, 300)
# 개별 단어 벡터 접근
model.wv['flower'].shape
(300,)
model.wv['flower'][:10]
array([ 0.02855109, 0.09972946, 0.04564843, -0.07675261, -0.01836147,
0.03833596, -0.03972314, 0.00658973, 0.02472829, 0.08172724],
dtype=float32)
등록된 질문이 없습니다. 궁금한 부분이 있으면 주저하지 말고 무엇이든 물어보세요.