質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1388閲覧

djangoで協調フィルタリングの書き方が分からない。

gik

総合スコア152

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/05/07 16:54

編集2019/05/09 19:08

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で協調フィルタリングのプログラムってサイトさがしてもないのですが
どう書いたらいいでしょうか?
またここに書いてあるよってありましたら、教えてください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

もう少し自分で勉強してみます。
あろがとうございます

投稿2019/06/02 20:08

gik

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問