category
LightFM是许多流行的推荐算法的Python实现,用于隐式和显式反馈。
它还可以将项目和用户元数据合并到传统的矩阵分解算法中。它将每个用户和项目表示为其特征的潜在表示的总和,从而允许推荐泛化到新项目(通过项目特征)和新用户(通过用户特征)。
该方法的细节在arXiv上提供的LightFM论文中进行了描述。
快速入门
如果你不耐烦,直接跳到Movielens快速入门。
安装
PyPI
使用pip从pypi安装:pip安装lightfm。在Linux、使用Homebrew Python的OSX和使用Miniconda的Windows上,一切都应该开箱即用。
OSX和Windows用户注意:默认情况下,LightFM在OSX和窗口上不使用OpenMP,因此所有型号配件都是单线程的。这是由于Clang(和Miniconda)不支持OpenMP,安装启用OpenMP的gcc版本既复杂又劳动密集。如果你想在这些平台上使用LightFM的多线程功能,你应该尝试通过Docker使用它,如下一节所述。
也不支持使用OSX中包含的默认Python发行版进行构建;请尝试Homebrew或Anaconda的版本。
使用Docker
在许多系统中,在Docker容器中尝试LightFM可能更方便。此存储库提供了一个足以运行LightFM及其示例的小型Dockerfile。要运行它:
- 安装Docker并启动Docker deamon/虚拟机。
- 克隆此存储库并导航到它:git clone git@github.com:lyst/lightfm.git && cd lightfm。
- 运行docker-compose build lightfm来构建容器。
容器现在应该可以使用了。然后,您可以:
- 通过运行docker-compose run lightfm py.test -x lightfm/tests/ 来运行测试/
- 通过运行docker-compose run --service-ports lightfm jupyter notebook lightfm/examples/movielens/example.ipynb --allow-root --ip="0.0.0.0" --port=8888 --no-browser 来运行movilens示例。笔记本电脑将在容器IP地址的8888端口访问。
使用方法
使用主LightFM类进行模型拟合非常简单。
创建具有所需潜在维度的模型实例:
from lightfm import LightFM model = LightFM(no_components=30)
假设train是一个(无用户,无项目)稀疏矩阵(1表示正交互,-1表示负交互),你可以通过调用来拟合传统的矩阵因式分解模型:
model.fit(train, epochs=20)
这将训练传统的MF模型,因为没有提供用户或项目功能。
要获取预测,请调用model.predict:
predictions = model.predict(test_user_ids, test_item_ids)
用户和项目特征可以通过将其传递到拟合方法中来纳入培训。假设user_feature是一个(no_users,no_user_feature)稀疏矩阵(item_feature也是如此),您可以调用:
model.fit(train, user_features=user_features, item_features=item_features, epochs=20) predictions = model.predict(test_user_ids, test_item_ids, user_features=user_features, item_features=item_features)
以训练模型并获得预测。
训练和预测都可以使用多个核心来提高速度:
model.fit(train, epochs=20, num_threads=4) predictions = model.predict(test_user_ids, test_item_ids, num_threads=4)
该实现使用异步随机梯度下降[6]进行训练。当交互矩阵(或特征矩阵)非常密集并且使用大量线程时,这可能会导致精度降低。然而,在实践中,在具有20个线程的稀疏数据集上进行训练不会导致可测量的准确性损失。
在隐式反馈设置中,可以使用BPR、WARP或k-OS WARP损失函数。如果训练是一个稀疏矩阵,其中正条目表示正交互,则模型可以按如下方式训练:
model = LightFM(no_components=30, loss='warp') model.fit(train, epochs=20)
示例
查看示例目录以获取更多示例。
Movielens示例展示了如何在Movielens数据集上使用LightFM,包括使用和不使用电影元数据。另一个例子比较了adagrad和adadelta学习计划的性能。
Kaggle优惠券购买预测示例将LightFM应用于预测优惠券购买。
关于使用LightFM的文章和教程
- Learning to Rank Sketchfab Models with LightFM
Metadata Embeddings for User and Item Cold-start Recommendations
在更改.pyx扩展名文件时,您需要运行python setup.py cythonize,以便在运行pip install-e之前生成扩展名.c文件。。
- 登录 发表评论