(人,アイテムデータ,評価点)という形のデータセットからコサイン類似度を求めて、そこからコサイン類似度が一定の角度以上あるものをソートしたいと思っています(例えばコサイン類似度が0.8以上に設定したり)。
以前、同じ形のデータセットでコサイン類似度を作りたいを思い質問して回答をもらい、同じ形で実装したものが以下のものになります。
下記のコードでは、人1と人2の角度を求めていますが、それを人1から似た類似度から指定した類似度以上の人を上からソートしたいです。
試したこと
cos_similarity > 0.8などやったところ「floatと関数は比較できない」の旨のエラーコードが出ました。
python
1def cos_similarity(person1, person2): 2 person1_reviews = dataset[person1] 3 person2_reviews = dataset[person2] 4 5 # 共通のものを取得 6 both_rated = person1_reviews.keys() & person2_reviews.keys() 7 if not both_rated: 8 return 0 # 共通のものが存在しない場合 9 10 # 共通のものの点数をそれぞれ取得 11 scores1 = [person1_reviews[item] for item in both_rated] 12 scores2 = [person2_reviews[item] for item in both_rated] 13 for item, score1, score2 in zip(both_rated, scores1, scores2): 14 15 # コサイン類似度の算出 16 cos_similarity = np.dot(scores1, scores2) / (np.linalg.norm(scores1) * np.linalg.norm(scores2)) 17 18 return cos_similarity
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/20 11:02
2021/12/20 11:49
2021/12/21 10:01