簡單的協(xié)同過濾
MATCH (u:User {name: "Cynthia Freeman"})-[:RATED]->(:Movie)<-[:RATED]-(o:User)
MATCH (o)-[:RATED]->(rec:Movie)
WHERE NOT EXISTS( (u)-[:RATED]->(rec) )
RETURN rec.title, rec.year, rec.plot
LIMIT 25
上面的簡單的過濾方法其實存在很多問題略吨,例如不基于流行度來進行規(guī)范或不考慮評級。
只考慮用戶喜歡的類型
許多推薦系統(tǒng)融合了協(xié)同過濾和基于內(nèi)容的方法困曙,對于特定用戶杨赤,哪些類型的評分高于平均水平晤碘?用它來評分類似的電影:
MATCH (u:User {name: "Andrew Freeman"})-[r:RATED]->(m:Movie)
WITH u, avg(r.rating) AS mean
MATCH (u)-[r:RATED]->(m:Movie)-[:IN_GENRE]->(g:Genre)
WHERE r.rating > mean
WITH u, g, COUNT(*) AS score
MATCH (g)<-[:IN_GENRE]-(rec:Movie)
WHERE NOT EXISTS((u)-[:RATED]->(rec))
RETURN rec.title AS recommendation, rec.year AS year, COLLECT(DISTINCT g.name) AS genres, SUM(score) AS sscore
ORDER BY sscore DESC LIMIT 10
分析:
1. 用戶u評過的電影的平均分
2. 找出用戶u評過的高于平均分的電影的分類检盼,并對分類計數(shù)
3. 找出這些分類的相關(guān)的電影,并且這些電影是用戶u沒有評過分的
4. 找出電影分類中影片數(shù)最多的前10部電影
Neo4j 做推薦 (1)—— 基礎(chǔ)數(shù)據(jù)
Neo4j 做推薦 (4)—— 基于內(nèi)容的過濾(續(xù))
Neo4j 做推薦 (6)—— 加權(quán)內(nèi)容算法
Neo4j 做推薦 (7)—— 基于內(nèi)容的相似度量標(biāo)準(zhǔn)
Neo4j 做推薦 (8)—— 協(xié)同過濾(利用電影評級)
Neo4j 做推薦 (9)—— 協(xié)同過濾(人群的智慧)
Neo4j 做推薦 (10)—— 協(xié)同過濾(皮爾遜相似性)