推荐算法简单总结

jopen 10年前

1、Item based collective filtering

总结:物以类聚

很多网站的核心算法之一

原因:item的增长速度远小于user的增长速度

方法:离线计算item的相似度矩阵供线上使用

缺点:由于基于item的相似性,故推荐的item相似,缺乏多样性

 

2、user based collective filtering

总结:人以群分

找和用户有相同品味的其他用户

适用范围:item更新频繁的应用

方法:通过相似用户喜欢的item推荐给该用户

缺点:相似用户群比较敏感,要频繁地计算出用户的相似用户矩阵,运算量会非常大。  推荐的大多是大家都喜欢的热门推荐,有点趋于大众化了

 

3、content based

方法:提取关键词计算相似性      可以提前咨询用户的偏好

好处:没有数据稀疏问题

 

4、slope one

方法:

Slope One的基本概念很简单, 例子1, 用户X, Y和A都对Item1打了分. 同时用户X,Y还对Item2打了分, 用户A对Item2可能会打多少分呢?

User Rating to Item 1 Rating to Item 2
X 5 3
Y 4 3
A 4 ?

根据SlopeOne算法, 应该是:4 - ((5-3) + (4-3))/2 = 2.5.

优点:简单,快速

 

5、svd

Singular Value Decomposition(奇异值分解)

总结:擒贼先擒王。 抓主要矛盾,忽略次要矛盾

这个方法是提取一般实矩阵“特征值”的算法,(这里特征值加引号是因为,特征值是针对方阵来定义的,而一般的m*n的实矩阵是没有特征值的。)

将一个m*n的实矩阵和它的转置相乘,就会得到一个方阵,然后对这个方阵做特征值分解,得到的特征值就是所谓的奇异值的平方。

拿到奇异值后,我们就可以抓到主要的成分,丢掉次要和非常次要的成分进行分析。也就是说,我们可以对原来的庞大的常常又非常稀疏的矩阵进行降维和分解,而分解后得到的矩阵都是稠密矩阵。最终我们会得到一个表示user特性的矩阵和一个表示item特性的矩阵。拿到这些数据之后,我们就可以进行推荐了,而且也可以很容易地进行聚类分析。

好处在于,可以解决rating矩阵的稀疏性问题,同时可以降低矩阵的维度,提高运算速度。但它的缺点是付出的空间代价太大

 

6、聚类算法

这里用到的聚类算法,是用来降低维度以及为并行计算作准备的。

拿到rating矩阵之后,可以通过这些评分将用户自然地聚成几簇,然后用上述的算法对各个簇做推荐算法并行计算,充分地利用好所有计算资源。

当然你也可以在svd分解之后,拿到user和item矩阵之后,对这两个矩阵分别作聚类分析,你可以得到user的簇以及item的簇。这样的结果会非常有意义,你可以作好友推荐,相似item推荐等等。

在基于内容的算法中,因为很多资讯之间并不是那么的相关,把他们都相互计算相似度,会得到很多的0,所以没有必要。因此可以在计算之前,对整个item做个聚类,然后分别对各簇来做相似度计算。

最简单的就是k-means。

 

7、组合算法

总结:博采众长

任何一个算法都有它独特的优势和固有的缺陷,因此单用一个算法的web应用很少,往往是将各种算法组合起来用。

1:将多种算法计算出来的结果,加权之后排序推荐给用户。

2:将多种算法计算出来的结果,各取前几个推荐给用户,这样做的好处是结果很丰富多彩。

3:用svd算法填充后的矩阵作为输入,用普通cf做计算来输出,然后排序推荐。这种叫做层次推荐,可以得到两种方法的好处。

4:对新用户做基于内容的推荐,因为新用户没有任何评分数据,对老用户用cf来做。

。。。。