見出しが混乱している可能性があります - 私は何をしたいのか説明しようとします: 私はコンピュータ科学を勉強していて、私の講義「Data-Warehousing &データマイニング」のプロジェクトとしてお勧めします。今、私は映画評価によって2人のユーザーの類似度を計算しようとしています。2つのpython-listsで共通の属性を持つオブジェクトを見つけるのに効率的な方法
class Rating(Model):
def __init__(self, userID, movieID, rating):
...
私は評価の__eq__, __ne__ and __hash__
をオーバーライドだけ、彼らの両方が評価されている映画を見つけるために、2ユーザーの評価のセットを作成することを可能にするMOVIEIDを考えます。ユーザー/自分の評価のエオシン-距離を計算することを可能にするために、同じ順序でソート 2つのリスト:
def similarity(userA, userB):
ratingsA = userA.ratings
ratingsB = userB.ratings
common_ratings = set((ratingsA, ratingsB))
私が今欲しい
は、次のようなものです。
[Rating(userID=1, movieID=4, rating=4.7), Rating(user=1, movie=7, rating=9.8)]
[Rating(userID=2, movieID=4, rating=2.0), Rating(user=2, movie=7, rating=6.6)]
私のアプローチは本当に好きではありませんが、私は最後のカップルの時間よりも良い方法を見つけることができませんでした。
もう、あまり効率的な方法は、(?と思う)、このようなものだ:40000本の映画や確率の周りにあるので、
lA = []
lB = []
for rA in ratingsA:
for rB in ratingsB:
if rA.movieID == rB.movieID:
lA.append(rA)
lB.append(rB)
sim = cos_dist(lA, lB)
このアプローチは、おそらく動作しますが、私は、実行時には恐ろしいだろうと思います2人のユーザーが同じ映画を評価してもかなり低いです...
多分誰かが効率的なアプローチをしていますか? ありがとうございます!
ユーザーが複数回同じ映画を評価することはできますか?そうでない場合は、値を 'append'ingした直後に'中断 'しなければならないので、それ以降のすべての反復が役に立たないためです。 – Bakuriu
'Rating'はSQLモデルですか?そのような場合には、テーブルをジョインするためにSQL文を使用するほうが良いかもしれません... – Bakuriu