北野坂備忘録

主にインストールやプログラミングのメモを載せています。

t-SNE再訪

 言語処理100本ノックの99番はこういう図を期待していたのではないか。
f:id:kenichia:20160320144455p:plain
 どのみち密集している中央部分は全く判別がつかないんですが。
 プログラムは以下のとおり。

#!/usr/bin/env python

import codecs
import re
import copy
import numpy as np
from sklearn.manifold import TSNE
from matplotlib import pyplot as plt

def getallvec(): #全ベクトル読み込み
  namelist = []
  npxlist = [] 
  fin = codecs.open('96.txt', 'r', 'utf_8')
  for line in fin: #読み込み
    string = re.split(" ",line[:-1])
    a = [float(x) for x in string[1:301] ]
    namelist.append(string[0])
    npxlist.append(copy.deepcopy(np.array(a)))
  npxarray = np.array(npxlist)
  return namelist,npxarray

if __name__ == "__main__":

  namelist,npxarray = getallvec()
#t-SNE
  model = TSNE(n_components=2)
  tsne_result = model.fit_transform(npxarray)
#表示
  fig,ax = plt.subplots()
  ax.scatter(tsne_result[:,0], tsne_result[:,1],s=1)
  for i, txt in enumerate(namelist):
    ax.annotate(txt, xy=(tsne_result[i,0], tsne_result[i,1]),size=6 )
  plt.show()