반응형
6.4 tSNE를 이용한 시각화와 차원축소의 효과
- tSNE: 시각화를 위해 사용되는 비지도학습 알고리즘, 다차원 데이터 사이의 거리를 가장 잘 보존하는 2차원 좌표를 찾기 위해 사용
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl
# 그래프에서 마이너스 폰트 깨지는 문제에 대한 대처
mpl.rcParams['axes.unicode_minus'] = False
from sklearn.manifold import TSNE
tfidf = TfidfVectorizer(tokenizer=tokenizer)
X_train_tfidf = tfidf.fit_transform(X_train) # train set을 변환
X_test_tfidf = tfidf.transform(X_test) # test set을 변환
tsne = TSNE(n_components=2, random_state=7)
tsne_tfidf = tsne.fit_transform(X_train_tfidf)
print('TSNE dimension:', tsne_tfidf.shape)
def tsne_graph(tsne_2, label, lim=None):
colors = {0:'blue', 1:'red', 2:'green', 3:'purple'}
x = tsne_2[:,0] #압축된 첫 차원을 x축으로 이용
y = tsne_2[:,1] #압축된 둘째 차원은 y축으로 이용
plt.figure(figsize=(15,10))
if lim == None:
lim = [min(x), max(x), min(y), max(y)]
plt.xlim(lim[0], lim[1])
plt.ylim(lim[2], lim[3])
#for i in range(500):
for i in range(len(x)):
#각 값에 대해 y값 즉 label에 따라 색을 바꿔가며 text로 그래프에 출력
if (lim[0] < x[i] < lim[1]) and (lim[2] < y[i] < lim[3]):
plt.text(x[i], y[i], label[i], color = colors[label[i]])
plt.show()
tsne_graph(tsne_tfidf, y_train, (-4, 5, -5, 5))
svd = TruncatedSVD(n_components=100, random_state=1) #압축할 component의 수 지정
X_train_lsa = svd.fit_transform(X_train_tfidf)
X_test_lsa = svd.transform(X_test_tfidf)
print('LSA Converted X shape:', X_train_lsa.shape)
print('Sum of explained variance ratio: {:.3f}'.format(svd.explained_variance_ratio_.sum()))
tsne_lsa = tsne.fit_transform(X_train_lsa)
print('TSNE dimension:', tsne_lsa.shape)
print('#Selected categories:', newsgroups_train.target_names)
tsne_graph(tsne_lsa, y_train)
"""
LSA Converted X shape: (2034, 100)
Sum of explained variance ratio: 0.209
TSNE dimension: (2034, 2)
#Selected categories: ['alt.atheism', 'comp.graphics', 'sci.space', 'talk.religion.misc']
"""
※ 해당 내용은 <파이썬 텍스트 마이닝 완벽 가이드>의 내용을 토대로 학습하며 정리한 내용입니다.
반응형
'텍스트 마이닝' 카테고리의 다른 글
토픽 모델링으로 주제 찾기 (2) (0) | 2023.07.12 |
---|---|
토픽 모델링으로 주제 찾기 (1) (0) | 2023.07.11 |
차원축소 (2) (0) | 2023.07.09 |
차원축소 (1) (0) | 2023.07.08 |
BOW 기반의 문서 분류 (8) (0) | 2023.07.07 |