基于稀疏矩阵的协同过滤模型快速knn相似算法

similarip的Python项目详细描述


similaripy

相似性

PY_PICPYPI_PICBUILD_STATUS_PICLICENSE_PICDOI_PIC

该项目提供了几种使用稀疏矩阵的knn(k近邻)相似性算法的快速python实现,在协同过滤推荐系统和其他系统中非常有用。

该软件包还包括一些在相似度计算之前的预处理阶段可能有用的规范化函数。

相似性

基本相似模型:

  • 点积
  • 余弦
  • 不对称余弦
  • 雅卡
  • 骰子
  • 特沃斯基

基于图的相似模型:

  • p3α
  • rp3β

高级相似模型:

  • S-plus

Similarities Documentation

所有模型都有多线程例程,使用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)

要求
PackageVersion
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中开发这些高性能的相似性来克服这个问题。比赛结束后,在我的队友们的推动下,我决定释放我的工作去帮助那些有一天会遇到同样问题的人。

感谢我的奶油萤火虫朋友们对我的支持。

许可证

根据麻省理工学院许可证发布

引文信息:DOI_PIC

@misc{boglio_simone_similaripy,
  author       = {Boglio Simone},
  title        = {bogliosimone/similaripy},
  doi          = {10.5281/zenodo.2583851},
  url          = {https://doi.org/10.5281/zenodo.2583851}
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
写入远程文件java   在java中尝试播放音频时出现音频流错误。wav文件   用户界面如何在Java中禁用GUI按钮   在java中如何使用条件拆分字符串   java从一个方法在数组中设置,从另一个方法获取   java如何忽略“”而不是“”   java证书。木卫一。IOException:密钥库被篡改,或密码不正确   java Android onCreate不调用   在play framework(i18n)中未正确显示德语Umlautes的java显示   使用java从eclipse运行MacOSX命令的macos   java是检查数组中备用项的最有效方法   如何使用java流编写包含循环、if/else和返回语句的代码   为什么在Java中,循环内的声明似乎比循环外的声明更快?   java软件包不存在mvn clean install