前提・実現したいこと
プログラミング初心者で、初投稿です。
わかりづらいとは思いますがご容赦ください。
https://qiita.com/hik0107/items/96c483afd6fb2f077985
@hik0107様のブログのデータセットからコサイン類似度を算出して比較をしようと、拙いながらも様々なブログなどを閲覧して自力でコサイン類似度の算出を試みたのですが、最終的に算出される値が1になってしまって(コサイン類似度は-1~1の間の値をとる)どうすれば正しい値が算出されるか悩んでいます。
datasetは先のブログのデータを利用しています。
発生している問題・エラーメッセージ
1.0
該当のソースコード
python
1import numpy as np 2import pandas as pd 3def cos_sim(person1, person2): 4 5 both_rated = {} # 双方に共通のアイテムを取得 6 7 for item in dataset[person1]: 8 if item in dataset[person2]: 9 both_rated[item] = 1 10 11 # 共通のアイテムを持っていなければ 0 を返す 12 if len(both_rated) == 0: 13 return 0 14 15 16 #コサイン類似度の計算 17 cos_similarity = [] 18 19 dot12 = np.dot(dataset[person1][item] , dataset[person2][item]) 20 norm1 = np.linalg.norm(dataset[person1][item]) 21 norm2 = np.linalg.norm(dataset[person2][item]) 22 23 for item in both_rated: 24 25 #内積の計算 26 cos_similarity = dot12 / (norm1 * norm2) 27 28 return cos_similarity 29 30 print(cos_simimilarity(person1,person2)) 31cos_sim('Lisa Rose','Jack Matthews')
試したこと
内積の計算のnorm1などに直接入れて算出した。
補足情報(FW/ツールのバージョンなど)
google colaboratoryを用いています。
回答1件
あなたの回答
tips
プレビュー