协同过滤推荐(第1周)

说明:文章为初学者看推荐系统(蒋凡),结合网上资料做的笔记,不保证其正确性~

一、首先当前的主流推荐方法有:

1、  协同过滤推荐;

2、  基于内容的推荐;

3、  基于知识的推荐;

4、  混合推荐;

(注:学习过程不必特意将他们区分开,由他们的推荐公式知道他们的缺陷,混合使用)

1、  协同过滤(CF collaborative Filtering):

1-1:基于用户的最近邻推荐:

1)  (我理解的定义)从“协同过滤”四字知道其指的是:因为想到推荐,我们都是想到问用户喜欢什么类型的事物,然后根据他的回答推荐给他,或者看他对一些已喜欢事物,推荐给他类似的事物。然而“协同推荐”和上面的思路不同,推荐系统需要其他用户“协同”,对所有用户进行“过滤”,选择出与目标用户有相似爱好的用户,然后进行推荐;

2)  例子说明(对物品的评分有1-5,对应不喜欢到喜欢):


物品1


物品2


物品3


物品4


物品5


平均


Alice


5


3


4


4



4(总物品数为4)


用户1


3


1


2


3


3


2.4·(这行及以下总物品数为5)


用户2


4


3


4


3


5


3.8


用户3


3


3


1


5


4


3.2


用户4


1


5


5


2


1


2.8

A、现在我们要算出Alice喜不喜欢物品5,即使用协同过滤方法算出Alice对物品5的评分,若评分高则说明Alice喜欢物品5,若评分则说明Alice不喜欢物品5

B、现在对所有的用户进行“过滤”,选择出,与Alice有相似爱好的人,通常我们判断两个人是否有相似的爱好,比较他们对物品的评分就好了,例如下面是我们最先想到:

a、最直观的方法:

Alice和用户1:|5-3|+|3-1|+|4-2|+|4-3|=7

Alice和用户2:|5-4|+|3-3|+|4-4|+|4-3|=2

……

b、但是此方法有个弊端,就是用户标准不同的时候,例如要求tom和mary是否相似,tom的评分标准松懈,对物品的评分为{4,3,5,5,4},而mary评分标准很严格,评分为{2,1,3,3,2},这样的评分很可能表示tom和mary都喜欢物品3,4,而用上面的计算方法则显示出他们的差别很大,这是不准确的。故而可以将上表数据每个减去相应平均数,转换为下表:


物品1


物品2


物品3


物品4


物品5


Alice


1


-1


0


0



用户1


0.6


-1.4


-0.4


0.6


0.6


用户2


0.2


-0.8


0.2


-0.8


1.2


用户3


-0.2


-0.2


-2.2


1.8


0.8


用户4


-1.8


2.2


2.2


-0.8


-1.8

该表避免了不同用户的评分标准不同的影响,在下图中即表现为,两个用户是否相似,不取决于他们的评分是否相差很大,而取决他们的走势是否相近(下图可以看出,Alice与用户1的爱好很相似,与用户4差距很大):

c、又因为上面的绝对值不利于计算,考虑使用根号,根号也很难计算。书上就有了下面的方法Pearson系数:

Pearson系数的理解:用户a和用户b采用pearson系数:

我的理解:为什么可以这样,我们看二维的,因为比较他们的趋势走向,故而cos值可以表示他们相似程度(推广到n为应该也行,但我现在还不知道能推广的原因):


物品1


物品2


用户a


a1


a2


用户b


b1


b2

d、由上面的分析知道:我们可以用下面公司计算两个用户是否相似:

e、计算结果:

f、找出与Alice相近的用户时,我们就可以用这些相近的用户来计算出alice对物品的评分了:

3)  缺陷:

A、当用户和物品成千上万时,计算机复杂度大;

B、 用户对物品的评分数量过少,甚至没有评论难以适用。

1-2、基于物品的最近邻推荐

1)  为了知道用户5喜不喜欢晴天,如下图,发现了绝大多数用户对晴天和七里香的评分相近,故而选出晴天,因为这两首歌很相似,如果用户5很喜欢七里香的话,他也很可能喜欢晴天,若是他不喜欢七里香,则也很可能不喜欢晴天;


用户1


用户2


用户3


用户4


用户5


晴天


1


2


3


4



七里香


2


2


3


4


4


海阔天空


3


2


1


4


5


匿名的好友


2


4


5


2


2

2)  计算方法与上面基于用户的类似,仍然以基于用户的例子进行计算:

1-3、SVD(奇异值分解)(该方法我还不是很理解,还要继续看资料):

参考1

参考2

1)  基础知识:

A、对角矩阵:出对角线外所有元素都为0的矩阵

B、 特征值:对一个M*M的C矩阵,若存在常数λ和矩阵X满足下列公式,则称λ为矩阵C的特征值,称矩阵X为矩阵C的特征向量;

C、 下图中的特征值λ和特征向量X:

D、将A矩阵分解为以下形式称为特征值分解,其中Q为矩阵A的特征向量组成的矩阵,表示对角阵,对角线上的元素为特征值

E、 奇异值(特征值分解是一个提取矩阵特征很不错的方法),对于一个N*M的矩阵,我们分解为如下形式,U为N*N的方阵(称作左奇异向量),是N*M的矩阵(除对角线的元素都为0,对角线的元素称为奇异值),V的转置称为右奇异向量:

F、 将矩阵A*(A的转置)得到方阵,即可按照上面的公式进行处理,v即为右奇异向量,为奇异值,u为左奇异向量:

G、奇异值和特征值一样,在矩阵中从大到小排列,在多数情况下,前10%的甚至1%就占了全部奇异值之和的99%以上了,即此时可以对r进行缩小(且r可以远小于n,m):

H、将上面所述表达为下图,当r越接近于n,则结果越接近于A。当r更小时,所占的存储越小,,即我们把A分解为右边三个矩阵时,保存右边三个占存储小的矩阵即可:

2、  基于内容的推荐简介:

1)  我的理解:分析用户曾经喜欢过或购买过的物品,看他们具有什么样的特点,然后根据这些特点来对用户进行推荐。例如,用户买过计算机概论和数据结构,然后我们分析这两本书知道它们都出自于“清华大学出版社”、“计算机专业书籍”,然后系统找到满足这两个特点的书推荐给用户;

2)  优点:

A、不需要大规模的数据就能获得较高的精确度;

B、 知道物品的属性后即可搜查出类似的书籍推荐;

C、 我自己还认为:对比协同过滤,协同过滤需要不断为用户更新数据,例如为用户1推荐书,而其他用户随着时间的推移在购买书,因此用户1的最近邻用户可能会发生改变;而基于内容的推荐则对更新的频率较低;

3)  适用:数据量很大时;

3、  基于知识的推荐简介:

1)  我的理解:以上两种推荐方法都需要有用户的历史数据或一些行为作为分析二得出结果,而类似相机,手机的购买难以从历史数据中得出推荐结果,故而主要从和用户的交互中获得相关信息,对用户进行推荐。例如:购买电脑时,会让用户选择cpu类型,主存、内存大小;

2)  缺点:

对于一些专业性的产品,用户的了解少,信息提供给用户造成困扰

时间: 2024-12-21 12:45:06

协同过滤推荐(第1周)的相关文章

协同过滤推荐算法

协同过滤推荐算法分为基于用户的协同过滤推荐UserCF和基于物品的协同过滤推荐ItemCF.介绍见<协同过滤的实现步骤>

《推荐系统》--协同过滤推荐

<Recommender System An Introduction>,第二章,协同过滤推荐. 定义 协同过滤推荐方法的主要思想是,利用已有用户群过去的行为或意见预测当前用户最可能喜欢哪些东西或对哪些东西感兴趣.此类型的推荐系统当前在业界广泛使用. 纯粹的协同方法的输入数据只有给定的用户-物品评分矩阵,输出数据一般有以下几种类型: (1)表示当前用户对物品喜欢或不喜欢程度的预测数值: (2)n项推荐物品的列表. 基于用户的最近邻推荐 主要思想 这是一种早期方法,user-based near

基于用户的协同过滤推荐算法原理和实现

在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是推荐系统领域最著名的算法. 本文简单介绍基于用户的协同过滤算法思想以及原理,最后基于该算法实现园友的推荐,即根据你关注的人,为你推荐博客园中其他你有可能感兴趣的人. 基本思想 俗话说"物以类聚.人以群分",拿看电影这个例子来说,如果你喜欢<蝙蝠侠>.<碟中谍>.&l

Slope One 协同过滤 推荐算法

Slope one  是一个简单,效率较高的协同过滤推荐算法. Slope One 算法是由 Daniel Lemire 教授在 2005 年提出.距今已经10年.   基于如下五点被设计出来: 1. 算法容易实现和维护 2. 对新的评分应该立即给予响应 3. 查询速度要快(虽然可能以牺牲存储量为代价) 4. 对新的用户也要能给出有效的推荐 5. 精度上要有竞争力 slope one用于推荐,其特点是算法逻辑简单,实现容易,算法复杂度低. 像是刚接触推荐系统的朋友可以先采用这种算法来快速实现推荐

【读书笔记】《推荐系统(recommender systems An introduction)》第二章 协同过滤推荐

输入:"用户-物品"评分矩阵 输出:(1)用户对某个物品喜欢程度的评分:(2)对于用户,n个推荐的物品列表 1. 基于用户的最近邻推荐(user-based cf) 算法基本假设:(1)如果用户过去有相似的偏好,那么他们未来也会有相似的偏好:(2)用户的偏好不随时间变化而变化 用户相似度计算:user-based cf中pearson相关系数比较好:item-based cf中余弦相似度比较好.学术界在相似度方面有较为深入的研究,例如:很多领域都存在一些所有人都喜欢的物品(热门物品),

一个简单的协同过滤推荐算法

1.推荐系统简介 个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品. 2.推荐系统分类 2.1基于内容的推荐(Content-based Recommendation) 基于内容的推荐系统的核心思想是挖掘被推荐对象的信息.基于内容的推荐算法的前提假设是:如果用户喜欢物品a,那么用户也应该会喜欢与a类似的物品.由于笔者的目的是侧重于介绍协同过滤推荐算法,所以对基于内容的推荐算法举个简单的例子一带而过: 假设一首歌有:名称.歌手.风格.作曲人这4个属性.如果用户Alice对

SimRank协同过滤推荐算法

在协同过滤推荐算法总结中,我们讲到了用图模型做协同过滤的方法,包括SimRank系列算法和马尔科夫链系列算法.现在我们就对SimRank算法在推荐系统的应用做一个总结. 1. SimRank推荐算法的图论基础 SimRank是基于图论的,如果用于推荐算法,则它假设用户和物品在空间中形成了一张图.而这张图是一个二部图.所谓二部图就是图中的节点可以分成两个子集,而图中任意一条边的两个端点分别来源于这两个子集.一个二部图的例子如下图.从图中也可以看出,二部图的子集内部没有边连接.对于我们的推荐算法中的

矩阵分解在协同过滤推荐算法中的应用

在协同过滤推荐算法总结中,我们讲到了用矩阵分解做协同过滤是广泛使用的方法,这里就对矩阵分解在协同过滤推荐算法中的应用做一个总结.(过年前最后一篇!祝大家新年快乐!明年的目标是写120篇机器学习,深度学习和NLP相关的文章) 1. 矩阵分解用于推荐算法要解决的问题 在推荐系统中,我们常常遇到的问题是这样的,我们有很多用户和物品,也有少部分用户对少部分物品的评分,我们希望预测目标用户对其他未评分物品的评分,进而将评分高的物品推荐给目标用户.比如下面的用户物品评分表: 用户\物品 物品1 物品2 物品

协同过滤推荐算法简述

协同过滤推荐算法是一种主流的.目前广泛应用在工业界的推荐算法. 一般,协同过滤推荐分为三种类型. 1.基于用户(user-based)的协同过滤 基于用户的协同过滤算法,主要考虑的是用户和用户之间的相似度,只要找出与目标用户相似度高的其他用户,根据相似用户喜欢的物品,预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户. 2.基于项目(item-based)的协同过滤 基于项目的协同过滤算法,类似于基于用户的协同过滤,只是这往往是根据用户的行为判断物品的相似度(并不是根据物品的