使用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推荐引擎。