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模块的更多相关文章

  1. 开源BTS产品中存在多处漏洞,攻击者或可劫持手机通讯基站

    前言 在过去的几周时间里,我从多个方面对GSM的安全性进行了调查和研究,例如GSM通信协议中存在的漏洞.除此之外,我还对目前世界上应用最为广泛的BTS软件进行了安全审计.在这篇文章中,我将会给大家介绍 ...

  2. 基于FPGA的中值滤波算法实现

    在这一篇开篇之前,我需要解决一个问题,上一篇我们实现了基于FPGA的均值滤波算法的实现,最后的显示效果图上发现有一些黑白色的斑点,我以为是椒盐噪声,然后在做基于FPGA的中值滤波算法的实验时,我发现黑 ...

  3. python开发学习-day05(正则深入、冒泡排序算法、自定义模块、常用标准模块)

    s12-20160130-day05 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  4. 机器学习实战基础(二十):sklearn中的降维算法PCA和SVD(一) 之 概述

    概述 1 从什么叫“维度”说开来 我们不断提到一些语言,比如说:随机森林是通过随机抽取特征来建树,以避免高维计算:再比如说,sklearn中导入特征矩阵,必须是至少二维:上周我们讲解特征工程,还特地提 ...

  5. 在Python程序中的进程操作,multiprocess.Process模块

    在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...

  6. python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)

    昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...

  7. python学习之算法、自定义模块、系统标准模块(上)

    算法.自定义模块.系统标准模块(time .datetime .random .OS .sys .hashlib .json和pickle) 一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1. ...

  8. 【SPMF开源数据挖掘平台入门】MaxSP算法使用说明

    前段时间,由于项目中用到了序列挖掘的算法,师兄推荐我用用SPMF.在此做个记录. 首先简单介绍一下SPMF: SPMF是一个采用Java开发的开源数据挖掘平台. 它提供了51种数据挖掘算法实现,用于: ...

  9. Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构

    转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5492298.html 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...

随机推荐

  1. IplImage 与mat之间的转换及释放内存

    IplImage *x = cvLoadImage(savefilename, ); Mat img(x,true); cvReleaseImage(&x); 完

  2. 安装依赖库的方法-linux

    前言 使用linux系统的过程中,项目可能需要用到各种依赖库或者工具包,本文对库或者包的安装方法进行概述. 具体方法 如何安装各种依赖库或者工具包:1)直接使用apt-get install进行安装, ...

  3. (精)字符串,map -> json对象->map(初学者必读)

    import java.util.LinkedList; import java.util.*; import java.util.ListIterator; import net.sf.json.J ...

  4. silverlight 进行本地串口调用的一种可行的解决方法 之silverlight端代码

    接上边的文章. 在javascript暴露操作activex 串口接收之后,就是silverlight端进行串口数据的显示,我们的显示方式比较简单,只是为了演示,我们每隔1秒进行数据的获取并显示, 为 ...

  5. c2java Greedy 之任务调度

    近期调试一个javaproject的时候,我遇到不是期望的输出结果时.是这么干的: A1凝视掉抛出的异常: A2加打印对照异常输入和正常输入. A3进一步加打印缩小范围. 事实上仅仅需:B1静下心来细 ...

  6. mysql和redis加入到windows服务

    mysql加入到windows服务: mysqld --install  Mysql5.6 mysqld --remove mysql5.6  从windows的服务中删除mysql服务 net st ...

  7. AQS源码分析

    AQS全程为AbstractQueuedSynchronizer,其定义了一套多线程访问共享资源的同步框架,大部分的同步类的实现都依赖于他,比如ReentrantLock,ReentrantReadW ...

  8. Oracle ADDM性能诊断利器及报告解读

    性能优化是一个永恒的话题,性能优化也是最具有价值,最值得花费精力深入研究的一个课题,因为资源是有限的,时间是有限的.在Oracle数据库中,随着Oracle功能的不断强大和完善,Oralce数据库在性 ...

  9. centos6 安装GitLab

    环境 Requirements 软件 版本CentOS 6.6Python 2.6Ruby 2.1.5Git 1.7.10+Redis 2.0+MySQL GitLab 7-8-stableGitLa ...

  10. ios之block笔记

    目测和函数指针基本类似用法,贴个hello world,备用 typedef int (^TestBlock)(int val1,int val2); __block ;//这里加__block是为了 ...