使用LightFM库在Python中构建推荐引擎

使用LightFM库在Python中构建推荐引擎

推荐引擎是机器学习在现实世界中最受欢迎的应用之一。随着电子商务、在线流媒体服务和社交媒体的增长,推荐引擎已成为向用户提供个性化内容和推荐的关键组成部分。在本教程中,我们将学习如何使用LightFM库构建推荐引擎。

LightFM是一个Python库,允许您构建具有显式和隐式反馈的推荐系统,例如评分或用户交互。它是一个混合推荐系统,可以处理基于内容和协同过滤的方法。LightFM是建立在NumPy、SciPy和Cython之上的,并提供对大型数据集的快速和可扩展的训练。

在本教程中,我们将使用Movielens数据集,该数据集包含来自943个用户对1682部电影的10万个电影评分。我们的目标是构建一个推荐引擎,根据用户过去的评分和相似用户的评分来预测用户对电影的评分。

开始

在我们深入使用lightfm库之前,我们首先需要使用pip安装该库。

然而,由于它不是内置的,我们必须先安装lightfm库。这可以使用pip软件包管理器完成。

要安装lightfm库,请打开终端并输入以下命令−

pip install lightfm

这将下载并安装lightfm库及其依赖项。安装完成后,我们可以开始使用lightfm和其模块!

第一步:加载数据

第一步是将Movielens数据集加载到我们的Python环境中。我们将使用LightFM中内置的Movielens数据集,该数据集可在datasets模块中找到。我们可以使用以下代码加载Movielens数据集:

from lightfm.datasets import fetch_movielens
data = fetch_movielens(min_rating=4.0)

fetch_movielens函数用于下载Movielens数据集,并返回包含评分矩阵、用户特征、物品特征和其他信息的字典。在本教程中,我们只对评分矩阵感兴趣。

第二步:构建推荐引擎

下一步是使用LightFM构建推荐引擎。我们将使用WARP(加权逼近-排序成对)算法,这是一种混合推荐系统,结合了内容-基于和协同过滤方法的优点。我们可以使用以下代码构建推荐引擎 −

from lightfm import LightFM
model = LightFM(loss='warp')
model.fit(data['train'], epochs=30, num_threads=2)

LightFM类使用WARP损失函数初始化推荐引擎。然后,我们使用两个线程将模型拟合到训练数据中的30个周期。

第三步:生成推荐

现在我们已经构建了推荐引擎,我们可以使用它为用户生成推荐。我们可以通过调用LightFM模型的recommend方法来实现。recommend方法接受两个参数:user_ids和item_ids。我们可以为单个用户或多个用户同时生成推荐。我们还可以指定要生成的推荐数量。以下代码为用户3生成10个推荐:

user_id = 3
n_items = data['train'].shape[1]
recommendations = model.predict(user_id, np.arange(n_items))
top_items = np.argsort(-recommendations)[:10]

predict方法会返回给定用户对每个项目的预测评分。然后,我们按照预测评分降序排序,并选择前10个项目作为推荐。

第四步:评估推荐引擎

构建推荐引擎后,评估其性能非常重要。我们可以使用精确度k和AUC指标来进行评估。精确度k指标测量了前k个推荐中与用户相关的推荐占比。AUC指标测量了接收者操作特性(ROC)曲线下的面积,该曲线显示了真正例率与假正例率之间的关系。

我们可以使用LightFM库来计算这些指标。可以使用precision_at_k方法计算精确度k,并使用auc_score方法计算AUC。以下是如何计算这些指标的示例:

from lightfm.evaluation import precision_at_k, auc_score

# Train the model
model.fit(interactions, epochs=10)

# Evaluate precision at k
print("Train precision at k:", precision_at_k(model, interactions, k=5).mean())
print("Test precision at k:", precision_at_k(model, test_interactions, k=5).mean())

# Evaluate AUC score
print("Train AUC score:", auc_score(model, interactions).mean())
print("Test AUC score:", auc_score(model, test_interactions).mean())

在这个例子中,我们正在使用交互矩阵训练模型,并在训练和测试数据集上评估精确度和AUC指标。我们对k使用了一个值为5的值,这意味着我们只考虑每个用户的前5个推荐。

完整代码

以下是完整的代码 –

import numpy as np
from lightfm.datasets import fetch_movielens
from lightfm import LightFM

# Load the MovieLens dataset.
data = fetch_movielens(min_rating=4.0)

# Define the model and fit it to the data.
model = LightFM(loss='warp')
model.fit(data['train'], epochs=30, num_threads=2)

# Evaluate the model on the training data.
train_precision = np.mean(precision_at_k(model, data['train'], k=10, num_threads=2))
train_auc = np.mean(auc_score(model, data['train'], num_threads=2))

# Evaluate the model on the test data.
test_precision = np.mean(precision_at_k(model, data['test'], k=10, num_threads=2))
test_auc = np.mean(auc_score(model, data['test'], num_threads=2))

# Print the evaluation results.
print('Train precision: {:.2f}'.format(train_precision))
print('Train AUC: {:.2f}'.format(train_auc))
print('Test precision: {:.2f}'.format(test_precision))
print('Test AUC: {:.2f}'.format(test_auc))

输出

Train precision: 0.51
Train AUC: 0.94
Test precision: 0.14
Test AUC: 0.86

总结

在本教程中,我们学习了如何使用LightFM库构建推荐引擎。首先,我们准备了数据并创建了交互矩阵。然后,我们训练了LightFM模型并使用它进行了推荐。最后,我们使用准确率在k和AUC指标评估了推荐引擎的性能。

LightFM库提供了一个强大和灵活的方式来构建推荐引擎,支持隐式和显式反馈数据。它能处理大型数据集并融合边信息,非常适合许多现实世界的推荐场景。通过按照本教程中的步骤,你将能够成功构建自己的LightFM推荐引擎。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程