基于稀疏矩阵的协同过滤模型快速knn相似算法
similarip的Python项目详细描述
相似性
该项目提供了几种使用稀疏矩阵的knn(k近邻)相似性算法的快速python实现,在协同过滤推荐系统和其他系统中非常有用。
该软件包还包括一些在相似度计算之前的预处理阶段可能有用的规范化函数。
相似性
基本相似模型:
- 点积
- 余弦
- 不对称余弦
- 雅卡
- 骰子
- 特沃斯基
基于图的相似模型:
- p3α
- rp3β
高级相似模型:
- S-plus
所有模型都有多线程例程,使用cython和openmp在所有可用的cpu内核之间并行地拟合模型。
规格化
该包包含规范化函数,如:l1、l2、max、tf idf、bm25、bm25+。
所有函数都是在低级编译的,如果需要节省内存,可以在csr矩阵上就地操作。
对于tf idf,bm25,bm25+,您可以选择日志基以及如何计算术语频率(tf)和逆文档频率(idf)。
安装和使用
要安装:
pip install similaripy
基本用法:
importsimilaripyassimimportscipy.sparseassps# create a random user-rating matrix (URM)urm=sps.random(1000,2000,density=0.025)# normalize matrix with bm25urm=sim.normalization.bm25(urm)# train the model with 50 knn per item model=sim.cosine(urm.T,k=50)# recommend 100 items to users 1, 14 and 8 filtering the items already seen by each usersuser_recommendations=sim.dot_product(urm,model.T,k=100,target_rows=[1,14,8],filter_cols=urm)
要求
Package | Version |
---|---|
numpy | >= 1.14 |
scipy | >= 1.0.0 |
tqdm | >= 4.19.6 |
cython | >= 0.28.1 |
注意:为了编译cython代码,需要一个带有openmp的gcc编译器
(在OSX上,它可以与自制软件一起安装:brew install gcc
)。
这个库已经在ubuntu、osx和windows上用python 3.6进行了测试。
(注意:在windows上,标记format_output='csr'有问题,只要让它等于默认值'coo')
最佳配置
我建议将scipy/numpy配置为使用英特尔的mkl矩阵库。 最简单的方法是安装anaconda python发行版。
未来工作
我计划在未来发布一些实用程序:
- 稀疏矩阵实用程序
- 新的相似性函数(欢迎使用好主意:)
历史记录
构建这个库的想法来自spotify组织的RecSys Challenge 2018。
我的团队,奶油萤火虫,在合理的时间内计算非常巨大的相似性模型有问题(用户评分矩阵中有6600万个交互),使用python和numpy是不合适的,因为计算一个模型需要一整天的时间。
作为团队的一员,我花了很多时间在cython中开发这些高性能的相似性来克服这个问题。比赛结束后,在我的队友们的推动下,我决定释放我的工作去帮助那些有一天会遇到同样问题的人。
感谢我的奶油萤火虫朋友们对我的支持。
许可证
根据麻省理工学院许可证发布
@misc{boglio_simone_similaripy,
author = {Boglio Simone},
title = {bogliosimone/similaripy},
doi = {10.5281/zenodo.2583851},
url = {https://doi.org/10.5281/zenodo.2583851}
}