LightFM快速入门:基于Movielens数据集的推荐系统实践

LightFM快速入门:基于Movielens数据集的推荐系统实践

lightfm A Python implementation of LightFM, a hybrid recommendation algorithm. lightfm 项目地址: https://gitcode.com/gh_mirrors/li/lightfm

前言

LightFM是一个功能强大的Python推荐系统库,它结合了协同过滤和内容推荐的优势,能够处理显式和隐式反馈数据。本文将带您快速上手LightFM,通过构建一个电影推荐系统来展示其核心功能。

环境准备

在开始之前,请确保已安装以下Python库:

  • numpy
  • lightfm

可以通过pip命令轻松安装这些依赖项。

数据准备

LightFM内置了Movielens 100k数据集的获取功能,这是一个经典的电影评分数据集,包含943位用户对1682部电影的评分数据。

import numpy as np
from lightfm.datasets import fetch_movielens

# 获取评分≥5.0的数据
data = fetch_movielens(min_rating=5.0)

这段代码会自动下载并预处理数据集,将其转换为适合计算的稀疏矩阵格式。数据集被分为训练集和测试集:

print(repr(data['train']))
print(repr(data['test']))

输出显示训练集包含19048个交互记录,测试集包含2153个记录。

模型构建

LightFM提供了多种损失函数,这里我们选择WARP(Weighted Approximate-Rank Pairwise)损失函数,它特别适合处理隐式反馈数据。

from lightfm import LightFM

# 创建WARP损失函数的模型
model = LightFM(loss='warp')

模型训练

我们使用随机梯度下降(SGD)进行模型训练,设置30个epoch和2个线程:

%time model.fit(data['train'], epochs=30, num_threads=2)

训练完成后,模型已经学习到了用户和物品的潜在特征表示。

模型评估

使用precision@k指标评估模型性能,该指标衡量在前k个推荐中用户实际喜欢的物品比例。

from lightfm.evaluation import precision_at_k

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]
        
        # 预测用户对所有电影的评分
        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)

# 为3个示例用户生成推荐
sample_recommendation(model, data, [3, 25, 450])

结果分析

从输出结果可以看到,模型能够识别出用户喜欢的电影类型,并推荐相似风格的电影。例如,喜欢冒险类影片的用户会得到更多同类影片的推荐。

进阶思考

  1. 尝试调整epochs数量,观察模型性能变化
  2. 实验不同的损失函数,如logistic或BPR
  3. 添加物品特征或用户特征,利用LightFM的混合推荐能力
  4. 调整学习率等超参数优化模型性能

总结

通过本教程,我们完成了使用LightFM构建推荐系统的完整流程。LightFM的优势在于:

  • 同时支持协同过滤和基于内容的推荐
  • 处理隐式和显式反馈数据
  • 高效的并行计算实现
  • 简单易用的API接口

希望这篇教程能帮助您快速上手LightFM,为您的推荐系统项目提供有力工具。

lightfm A Python implementation of LightFM, a hybrid recommendation algorithm. lightfm 项目地址: https://gitcode.com/gh_mirrors/li/lightfm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赖旦轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值