推荐算法简单总结
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来做。
。。。。