推荐笔记, 使用lightfm矩阵分解

以下是协同过滤推荐系统的学习笔记

  1. 公式


    image.png
  2. 逻辑图


    image.png
image.png
  1. 原理理解
  • 使用用户对物品的评分,分解出用户感兴趣的物品类型特征,和物品在不同物品类型的分数。例如:电影分为动作电影类型、情感电影类型,某一电影在动作电影类型分数为9,情感电影类型分数为1。同理某一用户对动作类型电影分数为1分,情感电影为9分。这些我把它理解为物对-物品类型特征和用户-物品类型特征。
  1. 使用LightFM
  • LightFM使用这边比较简单,就是给用户电影的评分数据,LightFM自动计算出用户对不同物品的分数
  • 一下是从LightFM官网粘帖的代码
from lightfm import LightFM
from lightfm.datasets import fetch_movielens
from lightfm.evaluation import precision_at_k
import numpy as np

# Load the MovieLens 100k dataset. Only five
# star ratings are treated as positive.
data = fetch_movielens(data_home='./data', min_rating=5.0)
print(data['train'])
# Instantiate and train the model
model = LightFM(loss='warp')
model.fit(data['train'], epochs=30, num_threads=2)

# Evaluate the trained model
test_precision = precision_at_k(model, data['test'], k=5).mean()

print("Train precision: %.2f" % precision_at_k(model, data['train'], k=5).mean())
print("Test precision: %.2f" % precision_at_k(model, data['test'], k=5).mean())

def sample_recommendation(model, data, user_ids):


    n_users, n_items = data['train'].shape

    for user_id in user_ids:
        known_positives = data['item_labels'][data['train'].tocsr()[user_id].indices]
        print(data['train'].tocsr())
        print(data['train'].tocsr()[user_id])
        print(data['train'].tocsr()[user_id].indices)
        scores = model.predict(user_id, np.arange(n_items))
        top_items = data['item_labels'][np.argsort(-scores)]

        print("User %s" % user_id)
        print("     Known positives:")

        for x in known_positives[:3]:
            print("        %s" % x)

        print("     Recommended:")

        for x in top_items[:3]:
            print("        %s" % x)

sample_recommendation(model, data, [3, 25, 450])
  1. github对应源码和需要的数据地址
    https://github.com/wengmingdong/tf2-stu/tree/master/recommender
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 2020.2.3 星期一 晴 1日常 今天疫情依旧在持续,继续封禁,而且可以...
    冥修人阅读 44评论 0 1
  • 土味情话的活动可以用到下一期行动营 改进:001规则需要简化,然后做成海报,时不时丢一个规则。 002预留半个小时...
    绾月绯阅读 359评论 0 0
  • 昨天晚上去了一个朋友家煮饭吃,厨房是公共厨房,一层楼的人共用一个的那种。 刚好是晚饭时间,厨房里人很多。打完下手的...
    林下飛阅读 522评论 0 0
  • 江南水乡——水墨画般的地方,生命中最初的八年,我便在那里度过。因此,童年记忆影影绰绰的碎片全都寄于那一隅。也许,正...
    星星漫谈阅读 630评论 0 1

友情链接更多精彩内容