元のページ

ステージ3-4: ベクトルの重み付け例(バイナリ、正規化、TFIDF値)(情報工学実験 3 : データマイニング班)

目次

想定環境

バイナリ・ベクトル

# データ準備(タームベクトルの続き)
#  data[x][4]は全てのサンプルで同じ回数出現。
from prettyprint import pp
docs = []
docs.append(u"会場には車で行きます。")
docs.append(u"会場には自動車で行きます。")
docs.append(u"会場には自転車で行きます。")
docs.append(u"お店には自転車で行きます。")
data = [[1, 0, 0, 0, 1, 1], [1, 0, 1, 0, 1, 0], [1, 0, 0, 1, 1, 0], [0, 1, 0, 1, 1, 0]]
data[0][0] = 10 #一部変更

# バイナリ(0/1)ベクトル
def transform_binary_vectors(data, threshold=0.):
    u'''データ(サンプル集)を0/1(binary)ベクトルに変換。
    threshold より大きい値を1、以下は0に変換。
    threshold のデフォルト値は0。
    '''
    binary_vectors = []
    for sample in data:
        tmp_vector = []
        for value in sample:
            if value > threshold:
                tmp_vector.append(1)
            else:
                tmp_vector.append(0)
        binary_vectors.append(tmp_vector)
    return binary_vectors

data2 = transform_binary_vectors(data)
data2

# dataと比べてdata2はどう変わった?




正規化ベクトル

# 正規化
import numpy as np
data3 = [data[i]/np.linalg.norm(data[i]) for i in range(len(data))]
data3
print "data[0]'s norm=%f" % (np.linalg.norm(data[0]))
print "data3[0]'s norm=%f" % (np.linalg.norm(data3[0]))

# dataと比べてdata3はどう変わった?




TFIDF値ベクトル(正規化済み)

# TFIDF値ベクトル (正規化済み)
from sklearn.feature_extraction.text import TfidfTransformer
transformer = TfidfTransformer()
data4 = transformer.fit_transform(data).toarray()
data4

# dataと比べてdata4はどう変わった?