开源推荐系统Librec中recommender模块算法了解——cf模块
1. k近邻(k-NearestNeighbor)算法介绍及在推荐系统中的应用
https://zhuanlan.zhihu.com/p/25994179
k近邻(k-NearestNeighbor)算法是一种基本分类和回归方法。分类问题的k近邻法即给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。(这就类似于现实生活中少数服从多数的思想)
算法注意点:K值选取(过小容易过拟合,过大大大降低预测准确率),特征归一化。
https://www.jianshu.com/p/33dbf9906ff2
KNN算法步骤为:
1、计算测试对象到训练集中每个对象的距离
2、按照距离的远近排序
3、选取与当前测试对象最近的k的训练对象,作为该测试对象的邻居
4、统计这k个邻居的类别频率
5、k个邻居里频率最高的类别,即为测试对象的类别
KNN监督学习的过程
1、归一化数据样本集
2、划分样本集为训练集和测试集
3、以训练集为算法参考系,测试集来测试算法
4、计算预测样品标签和真实样品标签的比值来评估算法的准确率
5、调节不同的参数找到最优算法参数
KNN算法的优缺点
1、优点非常简单的分类算法没有之一,人性化,易于理解,易于实现适合处理多分类问题,比如推荐用户
2、缺点属于懒惰算法,时间复杂度较高,因为需要计算未知样本到所有已知样本的距离样本平衡度依赖高,当出现极端情况样本不平衡时,分类绝对会出现偏差可解释性差,无法给出类似决策树那样的规则向量的维度越高,欧式距离的区分能力就越弱。
cf模块里相关算法:
ItemKNNRecommender和UserKNNRecommender
2.
矩阵分解技术在推荐系统中的应用及相关算法
论文:2009-Matrix
Factorization Techniques for Recommender Systems
可参考文章:https://zhuanlan.zhihu.com/p/27502172
cf模块里相关算法:
BiasedMFRecommender:添加了用户物品偏置项的矩阵分解模型。
SVDPlusPlusRecommender:SVD++模型:加了用户项目偏置项,和用户的隐式反馈信息的改进的BiasSVD模型。
PMFRecommender:
算法相关论文:
2008-Probabilistic Matrix Factorization
Improving regularized singular value decomposition for collaborative filtering
可参考文章: https://blog.csdn.net/shenxiaolu1984/article/details/50372909
利用代数中SVD方法对矩阵进行分解。奇异值分解首先需要对评分矩阵进行补全,比如用全局平均值或用户、物品平均值进行补全。然后对补全之后的矩阵进行SVD分解从而将高维评分矩阵分解成低维的U,I矩阵。但是这种方法有两个问题:一是补全后的矩阵是一个稠密矩阵,存储需要很大空间。二是SVD计算复杂度很高。
BPMFRecommender:
算法相关论文:
Bayesian Probabilistic Matrix Factorization using Markov Chain Monte Carlo
BPMF(Bayesian Probabilistic Matrix Factorization)算法可参考文章 https://blog.csdn.net/shenxiaolu1984/article/details/50405659
MF PMF BPMF算法理解可参考文章
: https://blog.csdn.net/shulixu/article/details/75349138
PMF是从概率生成过程的角度来解释user和item的隐式特征矩阵,SVD是从优化目标出发,如何确定user和item的隐式特征矩阵会使得损失最少。
3.
基于排序学习的推荐方法中Pair-wise在推荐系统中的应用及相关算法
基于排序学习的推荐方法主要分为三大类,分别是Point-wise,Pair-wise和List-wise(对三种排序方法的介绍):
http://www.cnblogs.com/kemaswill/archive/2013/06/01/3109497.html
http://baogege.info/2014/10/19/learning-to-rank-for-recommender-system/
Pairwise类算法的一种:Bayesian
Personalized Ranking (BPR)
BPR是基于矩阵分解的一种排序算法,但是和funkSVD之类的算法比,它不是做全局的评分优化,而是针对每一个用户自己的商品喜好分别做排序优化。因此在迭代优化的思路上完全不同。同时对于训练集的要求也是不一样的,funkSVD只需要用户物品对应评分数据二元组做训练集,而BPR则需要用户对商品的喜好排序三元组做训练集。
BPRRecommender:
相关论文:Bayesian
Personalized Ranking from Implicit Feedback
BPR算法介绍:https://www.cnblogs.com/pinard/p/9128682.html
AoBPRRecommender:
相关论文:
Improving Pairwise Learning for Item Recommendation from Implicit Feedback
均匀采样策略下,通过随机梯度下降方法求解时,会出现梯度消失的问题->融合内容信息的适应性采样策略对BPR算法的改进。Pairwise适用场景:以隐式反馈类型为主的推荐系统,需要从大堆东西里挑选出感兴趣的一小堆东西的有序集。
4.
主题模型在推荐系统里的应用和相关算法
wikipedia:
主题模型(Topic
Model)在机器学习和自然语言处理等领域是用来在一系列文档中发现抽象主题的一种统计模型。直观来讲,如果一篇文章有一个中心思想,那么一些特定词语会更频繁的出现。比方说,如果一篇文章是在讲狗的,那“狗”和“骨头”等词出现的频率会高些。如果一篇文章是在讲猫的,那“猫”和“鱼”等词出现的频率会高些。而有些词例如“这个”、“和”大概在两篇文章中出现的频率会大致相等。但真实的情况是,一篇文章通常包含多种主题,而且每个主题所占比例各不相同。因此,如果一篇文章10%和猫有关,90%和狗有关,那么和狗相关的关键字出现的次数大概会是和猫相关的关键字出现次数的9倍。一个主题模型试图用数学框架来体现文档的这种特点。主题模型自动分析每个文档,统计文档内的词语,根据统计的信息来断定当前文档含有哪些主题,以及每个主题所占的比例各为多少。主题模型最初是运用于自然语言处理相关方向,但目前已经延伸至例如生物信息学的其它领域。
PLSARecommender:
相关论文:
Latent semantic models for collaborative filtering
LDARecommender:
相关论文:
Latent Dirichlet Allocation
Gibbs sampling in the generative model of Latent Dirichlet Allocation
LDA运用于推荐系统时:
users被当做为documents
items被当做为words
latent factors被当做为topics
维基百科LDA解释:
隐含狄利克雷分布(英语:Latent
Dirichlet allocation,简称LDA),是一种主题模型,它可以将文档集中每篇文档的主题按照概率分布的形式给出。同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量k即可。此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它。LDA首先由Blei,
David M.、吴恩达和Jordan,
Michael I于2003年提出(论文链接:http://jmlr.csail.mit.edu/papers/v3/blei03a.html),目前在文本挖掘领域包括文本主题识别、文本分类以及文本相似度计算方面都有应用。
理解可以参考:
理顺主题模型LDA及在推荐系统中的应用 https://blog.csdn.net/leiting_imecas/article/details/68961205,该篇文章中指出了pLSA与LDA两种模型的区别。
算法求解:
最初:EM算法(Expectation-maximization
algorithm)
后来:较为简单的Gibbs
Sampling算法
URPRecommender:
一个用于评分预测类推荐算法的LDA模型,treat items as documents and ratings as words
相关论文:
Modeling user rating profiles for collaborative filtering
https://ieeexplore.ieee.org/document/5992572:
Regularized Gibbs Sampling for User Profiling with Soft Constraints
基于改进URP模型和K近邻的推荐研究
开源推荐系统Librec中recommender模块算法了解——cf模块的更多相关文章
- 开源BTS产品中存在多处漏洞,攻击者或可劫持手机通讯基站
前言 在过去的几周时间里,我从多个方面对GSM的安全性进行了调查和研究,例如GSM通信协议中存在的漏洞.除此之外,我还对目前世界上应用最为广泛的BTS软件进行了安全审计.在这篇文章中,我将会给大家介绍 ...
- 基于FPGA的中值滤波算法实现
在这一篇开篇之前,我需要解决一个问题,上一篇我们实现了基于FPGA的均值滤波算法的实现,最后的显示效果图上发现有一些黑白色的斑点,我以为是椒盐噪声,然后在做基于FPGA的中值滤波算法的实验时,我发现黑 ...
- python开发学习-day05(正则深入、冒泡排序算法、自定义模块、常用标准模块)
s12-20160130-day05 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- 机器学习实战基础(二十):sklearn中的降维算法PCA和SVD(一) 之 概述
概述 1 从什么叫“维度”说开来 我们不断提到一些语言,比如说:随机森林是通过随机抽取特征来建树,以避免高维计算:再比如说,sklearn中导入特征矩阵,必须是至少二维:上周我们讲解特征工程,还特地提 ...
- 在Python程序中的进程操作,multiprocess.Process模块
在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...
- python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)
昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...
- python学习之算法、自定义模块、系统标准模块(上)
算法.自定义模块.系统标准模块(time .datetime .random .OS .sys .hashlib .json和pickle) 一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1. ...
- 【SPMF开源数据挖掘平台入门】MaxSP算法使用说明
前段时间,由于项目中用到了序列挖掘的算法,师兄推荐我用用SPMF.在此做个记录. 首先简单介绍一下SPMF: SPMF是一个采用Java开发的开源数据挖掘平台. 它提供了51种数据挖掘算法实现,用于: ...
- Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构
转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5492298.html 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...
随机推荐
- Java工具创建密钥库,用于Unity 3D打包、签名、发布
Java工具创建密钥库 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...
- Hibernate4.3配置
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...
- hdu2068 RPG的错排 组合数/递推
#include<stdio.h> ]; long long c(int a,int b) { ,j; ;i>=a-b+,j<=b;i--,j++) sum=sum*i/j; ...
- JQuery实时监控文本框字符变化
$(function(){ $('input[name="addr"]').on('input propertychange', function() { if ($('input ...
- test20181004 排列
题意 分析 容斥公式的意义 选了原图中\(x(x \geq i)\)条边的方案,重复了\(\binom{x}{i}\)次. 有多加多减,所以就是那个式子. 具体而言,对选了x条原图中的边的方案,总共加 ...
- hasura graphql 集成pipelinedb测试
实际上因为pipelinedb 是原生支持pg的,所以应该不存在太大的问题,以下为测试 使用doker-compose 运行 配置 docker-compose 文件 version: '3.6' s ...
- tomcat源码阅读之载入器(Loader)
一.Java类的载入器: 双亲委派模型: 1.JVM提供了三种类型的类加载器:引导类载入器(bootstrap class loader).扩展类载入器(extension class loader) ...
- node 知识点
问:局部安装如何使用npm run命令? 答:如果已局部安装了babel-cli(babel-cli自带babel-node命令),package.json文件配置如下: "scripts& ...
- Arrays、ArrayUtils 区别
Arrays java.util 包提供的静态类:java.util.Arrays 此静态类专门用来操作array ,提供搜索.排序.复制等静态方法. ArrayUtils apache 提供的类:o ...
- 自定义django的admin后台action
django的admin后台管理系统中自带了一个批量删除所选对象的action. 我们还可以添加自定义的action来实现其它类似的功能,如批量修改某个字段的功能.简单的,例如将文章批量标记为已发布的 ...