共计 984 个字符,预计需要花费 3 分钟才能阅读完成。
近期想使用推荐系统实现一些功能,由于不懂 Java,担心 Python 的性能不够,因此就关注了 go 语言实现的开源项目。
推荐系统中的协同过滤算法原理
协同过滤的原理很简单,就是根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性, 然后再基于这些关联性进行推荐
这里主要实现了基于用户和基于项目的协同过滤两种推荐算法 1
基于用户的协同推荐(User based Collaborative Filtering Recommendation)
基于用户协同推荐的原理是,根据所有用户对物品或者信息的偏好,发现当前用户口味和偏好相似的“邻居”用户群,基于邻居的偏好信息,对用户进行推荐
举例, 假设有以下关系
A –> a,c 表示用户 A 喜欢物品 a 和 cB –> bC –> a,c,d 可以发现用户 A 和 C 的口味偏好相似(他们是邻居),同时 C 喜欢物品 d,那么我们可以推断 用户 A 也可能喜欢物品 d
Item based Collaborative Filtering Recommendation
基于项目的协同推荐
基于项目的协同推荐的原理是,它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户
举例,假设有以下关系
A –> a,cB –> a,b,cC –> a 根据基于项目的协同过滤原理,可以发现物品 a 和物品 c 相似,用户 C 喜欢 a 物品,那么可以把 c 物品推荐给他
在 github 上搜索,发现项目较少,较为完善的是 gorse 项目
gorse: Go Recommender System Engine
gorse 使用 go 语言实现推荐系统,提供以下模块方便构建推荐系统:
数据:支持从文件加载(提供内置部分数据可用于测试)
分离器:支持 K -fold、比率、保留方式分离数据集
模型:推荐模型基于协同过滤算法,包括矩阵分解、基于临接的方法、Slope One、Co-Clustering2
评估:可使用 RMSE、MAE 来评分,包括准确率、召回率、归一化折损累积增益 NDCG、平均准确率 MAP、MRR、AUC.
参数搜寻:使用网格或随机方式寻找最佳超参
持久化:保存模型或加载模型
SIMD(可选):理论上在对矢量采用 AVX2 指令,可以获得比单指令快 4 倍的速度
项目地址:github.com/zhenghaoz/gorse
推荐项亮著的推荐系统实践 ↩
实现推荐系统引擎 (一):评分预测 ↩