結果をベクトルから行列に変換するときに数字の値が変わる理由がわかりません。
http://www.yoheim.net/blog.php?q=20160313
のサイトを参考にレコメンドシステムを作っています。
import numpy as np from scipy.spatial.distance import cosine from scipy.spatial.distance import pdist from scipy.spatial.distance import squareform x = np.array([ [1,1,1,0,0,0], [1,1,0,0,0,0], [0,0,1,0,1,0], [0,0,1,1,1,0], [0,1,1,0,0,0], [1,1,0,1,1,0], [1,0,1,0,0,0], [0,0,0,0,0,1] ]) #列に変換 #print(x.T[0]) #print(x.T[1]) #コサイン類似度 item1 = x.T[0] item2 = x.T[1] sim = 1 - cosine(item1, item2) #全てのアイテムのコサイン類似度 # アイテムを行に、ユーザーを列に転置する x = x.T # 行ごと(=つまりアイテムごと)の距離を計算する d = pdist(x, 'cosine') print(d) # 「類似度 = 1 - 距離」 d = 1 - d #結果をベクトルから行列に変換 d = squareform(d) print(d)
とコードを書き実行すると
# 行ごと(=つまりアイテムごと)の距離を計算する d = pdist(x, 'cosine') print(d)
では
[ 0.25 0.5527864 0.64644661 0.71132487 1. 0.5527864 0.64644661 0.71132487 1. 0.68377223 0.48360222 1. 0.18350342 1. 1. ]
と出力され、
#結果をベクトルから行列に変換 d = squareform(d) print(d)
では
[[ 0. 0.75 0.4472136 0.35355339 0.28867513 0. ] [ 0.75 0. 0.4472136 0.35355339 0.28867513 0. ] [ 0.4472136 0.4472136 0. 0.31622777 0.51639778 0. ] [ 0.35355339 0.35355339 0.31622777 0. 0.81649658 0. ] [ 0.28867513 0.28867513 0.51639778 0.81649658 0. 0. ] [ 0. 0. 0. 0. 0. 0. ]]
と出力されました。
なぜ、結果をベクトルから行列に変換するときに数字の値が変わるのでしょうか?そして、行列に変換するときには数字の値も増えている理由もわかりません。なぜなのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。