画像は私のテーブルの構造を示しています。最初の行は、tutorB が StudentD に 10 点を与えることを意味します。2 行目は、tutorE がまだ StudentD に何の評価も与えていないことを意味します。
次のテーブルを生成するにはどうすればよいですか? stackoverflow.com の別の投稿を参照しました。MySQL での協調フィルタリング? それでも、私はまだかなり混乱しています。
上記の画像から、o は推奨を意味し、レートは 7 以上です。x は推奨されないことを意味し、比率は 7 未満です。
たとえば、tutorB は StudentD に 10 点を与えます。したがって、画像の 2 行目から、StudentD 列に「o」があることがわかります。(そして、他の 3 つの行のデータは、現在ランダムに割り当てられています。)
ここで、ある生徒を家庭教師 A に推薦するとします。家庭教師 B、C、および D のランク (または類似度) は、それぞれ 0、2、および 3 です。
レートを「o」と「x」に変換してランクを計算できるように SQL を生成するにはどうすればよいですか。そして、最も重要なことは、画像のように StudentH を TutorA に推薦したいということです。
前回の投稿のコードをどのように変更すればよいですか? そして、上記の私の考えが正しければ?
ありがとう。
================================================== ==========================
編集済み
データベースに次のデータがあります。最初の行は、tutorA が StudentC に 10 点を与えることを意味します。
分かりやすいように、別の表に変換します。v
レートの値です。
create temporary table ub_rank as
select similar.NameA,count(*) rank
from tbl_rating target
join tbl_rating similar on target.NameB= similar.NameB and target.NameA != similar.NameA
where target.NameA = "tutorA"
group by similar.NameA;
select similar.NameB, sum(ub_rank.rank) total_rank
from ub_rank
join ub similar on ub_rank.NameA = similar.NameA
left join ub target on target.NameA = "tutorA" and target.NameB = similar.NameB
where target.NameB is null
group by similar.NameB
order by total_rank desc;
select * from ub_rank;
上記のコードは、MySQL の協調フィルタリングから参照されていますか? . いくつかの質問を聞きたいんです。
SQL には 2 つの部分があります。最初の部分から * を選択できます。ただし、上記のように SQL 全体を入力すると、システムは
Table 'mydatabase.ub' doesn't exist
「コードをどのように変更すればよいですか?」と警告します。コードは類似性を見つけます。マークが 7 未満の場合は に変更し
o
、それ以外の場合は に変更しv
、特定のユーザーの類似度をカウントするように、コードをどのように変更すればよいですか?