协同过滤推荐(第1周)

来源:互联网 发布:中国域名交易中心 编辑:程序博客网 时间:2024/06/05 18:35
说明:文章为初学者看推荐系统(蒋凡),结合网上资料做的笔记,不保证其正确性~

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

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)  缺点:

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

0 0
原创粉丝点击