djangoで協調フィルタリングのプログラムを書きたいのですが
このようなデータベースが入っているとして
name movie score 'Lisa Rose' 'Lady in the Water' 2.5 'Lisa Rose' 'Snakes on a Plane' 3.5 'Lisa Rose' 'Just My Luck' 3.0 'Lisa Rose' 'Superman Returns' 3.5 'Lisa Rose' 'You, Me and Dupree' 2.5 'Gene Seymour' 'Lady in the Water' 3.0 'Gene Seymour' 'Snakes on a Plane' 3.5 'Gene Seymour' 'Just My Luck' 1.5 'Gene Seymour' 'Superman Returns' 5.0 'Gene Seymour' 'The Night Listener' 3.0 'Toby' 'Snakes on a Plane' 4.5 'Toby' 'You, Me and Dupree' 1.0 'Toby' 'Superman Returns' 4.0
下記コードはPythonで簡単な協調フィルタリングを実装するためのノート
を参考にしました。
def get_similairty(person1, person2): ## 両者とも見た映画の集合を取る set_person1 = set(dataset[person1].keys()) set_person2 = set(dataset[person2].keys()) set_both = set_person1.intersection(set_person2) if len(set_both)==0: #共通でみた映画がない場合は類似度を0とする return 0 list_destance = [] for item in set_both: # 同じ映画のレビュー点の差の2乗を計算 # この数値が大きいほど「気が合わない」=「似ていない」と定義できる distance = pow(dataset[person1][item]-dataset[person2][item], 2) list_destance.append(distance) return 1/(1+sqrt(sum(list_destance)))
これをデータベースから引っ張り出してdjangoで書いたみたのが下記プログラムです。
def get_similairty(person1, person2): person1 = Entry.objects.filter(name='TaroLisa Rose') person2 = Entry.objects.filter(name='TaroGene Seymour') movie1=[person1.movie.value] score1=[person1.score.value] movie_score1=dict(zip(movie1,score1)) movie2=[person2.movie.value] score2=[person2.score.value] movie_score2=dict(zip(movie2,score2)) set_both=movie_score1.keys() & movie_score2.keys() for value in set_both.values: distance = pow(movie_score1.value-movie_score2.value, 2) list_destance.append(distance) return 1/(1+sqrt(sum(list_destance)))
特に下記コード
pow(dataset[person1][item]-dataset[person2][item], 2)
が特にどうかけばいいのかわかりません。
一応上記で自分の書いたプログラム書いてみたのですが....
djangoで協調フィルタリングのプログラムってサイトさがしてもないのですが
どう書いたらいいでしょうか?
またここに書いてあるよってありましたら、教えてください。
よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。