1、Item based collective filtering
这个算法是cf中的一种,也是当今很多大型网站都在采取的核默算法之一。
对 于商城网站(以Amazon为代表,当然也包含京东那种具有搞笑特点的推荐体系在内),影视类推荐,图书类推荐,音乐类推荐体系来说,item的增长速度 远不如user的增长速度,并且item之间的类似性远不如user之间的类似性那么敏感,所以可以在离线体系中将item的类似度矩阵策画好,以供线上 可以近乎即时地进行推荐。因为这种办法靠的是item之间的相干性进行推荐,所以推荐的item一般都和喜好的item内容或者特点高度类似,很难推荐出 用户潜伏喜好的item,多样性也斗劲差。
2、user based collective filtering
这个是cf中的别的一种,它的首要特点是可以发明和用户具有同样taste的人,有句俗话叫做观其友知其人,可能也是这个事理吧。
找 到用户的类似用户,经由过程类似用户喜好的item推荐给该用户。因为用户的类似用户群还是斗劲敏感的,所以要频繁地策画出用户的类似用户矩阵,如许的话 运算量会很是大。并且这个算法往往推荐出来的item很多都是大师都喜好的斗劲hot的item,有的时辰它供给的成果并不是个性化,反而成了公共化的推 荐了。用这种算法的web应用一般都是item更新频繁,比如供给资讯类办事的应用(以“指阅”为代表的),或者笑话类推荐(以“嘲笑话精选”为代表 的)。当然这种算法的一个中心产品-----用户类似度矩阵是一个很有效的器材,社交类的网站可以哄骗这个中心产品来为用户供给雷同品位的石友推荐。
3、content based
基 于内容的推荐,很大程度上是在进行文本发掘。web应用供给的内容或者爬取的内容在推给用户之前可以做一些发掘,比如资讯类的应用,将抓取到的资讯,经由 过程文本分析那一套算法提取出每篇资讯的关键词,以及统计频次和逆向文档频率来聚类或者笨一点地话策画出资讯的类似度矩阵,即共同的key words越多,两篇资讯的类似度越高。当你的用户很少很少,你的显式反馈数据很是很是少的时辰,你可以按照用户的浏览或者搜刮等等各类行动,来给用户进 行推荐。再鄙陋一点的话,你可以在用户方才注册好你的应用的时辰,给他一些提问,比如让他输入一些感爱好的话题啊,或者对以前看过的电影打分什么的。(当 然这些电影都是你从各个簇中随机拔取的,要足够多样性)这个算法它好就好在,不须要拿到用户--项目标评分矩阵,只须要知道用户喜好什么,就可以很快速地 推荐给用户十分相干的item。这个算法须要天天都要按照你抓取的资讯,络续地策画item之间的类似性。这个算法有个益处在于可以安闲应对上方的两个算 法其实都很难应对的题目,就是若是你想推出一个新的item,因为没有一小我有对这个new item的评分,所以上述的两个算法不成能推荐新的器材给你,但你可以用基于内容的算法将新的item策画出它属于哪个类,然后时不时地推出你的新 item,这点对于商城尤其首要。
4、slope one
推 荐体系的最最本质的工作就是把user-item rating矩阵中的空白填好,看穿这个本质今后,你可能会感觉题目一会儿简单多了,填格子啊?填格子谁不会啊。是以很多高效加搞笑的算法就出来了。 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.
当然这个只是个算例简单地申明下道理,当user和item都很多的时辰,你可以用加权的办法来做。
为什么我会感触感染这个算法的结果会不睬想呢?
因为,这个算法老是把你的口味和公共的均匀口味尴尬刁难等,推荐出来的器材很难是很是个性化的。很轻易让很多用户的推荐成果趋势一致,也就是大数的均匀值,也即公共的均匀口味。
5、svd
svd的全称是:Singular Value Decomposition,翻译过来是奇怪值分化,是一种矩阵分化的办法。其实,这个办法是提取一般实矩阵“特点值”的算法,(这里特点值加引号是因 为,特点值是针对方阵来定义的,而一般的m*n的实矩阵是没有特点值的。)其实,矩阵就是一个线性变换的默示办法,因为一个向量乘一个矩阵的成果是一个向 量,第一个向量经由过程线性变换来变成第二个向量。线性变换有很多变换标的目标,比如你可以对一个图像矩阵做伸缩同时也做平移。那么特点值和特点向量又是 什么?一个特点向量就是默示此中的一个变换标的目标,而对应的特点值则默示这个变换标的目标对于全部线性变换有多么首要。
书 归正传,那么奇怪值又是什么?我感觉奇怪值就是特点值从方阵往一般实矩阵的一个推广。你将一个m*n的实矩阵和它的转置相乘,就会获得一个方阵,然后对这 个方阵做特点值分化,获得的特点值就是所谓的奇怪值的平方。我的意思是说,某种意义上,可以讲奇怪值和特点值懂得为一回事。
那 么拿到奇怪值又会有什么用呢?拿到奇怪值后,我们就可以抓到首要的成分,丢掉次要和很是次要的成分进行解析。也就是说,我们可以对本来的重大的经常又很是 稀少的矩阵进行降维和分化,而分化后获得的矩阵都是稠密矩阵。终极我们会获得一个默示user特点的矩阵和一个默示item特点的矩阵。拿到这些数据之 后,我们就可以进行推荐了,并且也可以很轻易地进行聚类解析。
这个算法的益处在于,可以解决rating矩阵的稀少性题目,同时可以降落矩阵的维度,进步运算速度。但它的毛病是付出的空间价格太大。在做svd分化时,你须要先把一个大的rating矩阵分化成三个大的矩阵,这三个矩阵须要存在策画机内存中,然后才干进行降维。
其实,svd这个办法的思路和PCA(主成分解析法)很像,抓住首要抵触,忽视次要抵触。分化降维后的矩阵很是约便是本来的矩阵。
6、聚类算法
这里用到的聚类算法,是用来降落维度以及为并行策画作筹办的。
拿到rating矩阵之后,可以经由过程这些评分将用户天然地聚成几簇,然后用上述的算法对各个簇做推荐算法并行策画,充沛地哄骗好所有策画资料。
当然你也可以在svd分化之后,拿到user和item矩阵之后,对这两个矩阵分别作聚类解析,你可以获得user的簇以及item的簇。如许的成果会很是有意义,你可以作石友推荐,类似item推荐等等。
在基于内容的算法中,因为很多资讯之间并不是那么的相干,把他们都彼此策画类似度,会获得很多的0,所以没有须要。是以可以在策画之前,对全部item做个聚类,然后分别对各簇来做类似度策画。
聚类算法中,我用过机能最好的也是最简单的就是k-means。
7、组合算法
任何一个算法都有它独特的上风和固有的缺点,是以单用一个算法的web应用很少,往往是将各类算法组合起来用。
一种体式格式是:将多种算法策画出来的成果,加权之后排序推荐给用户。
一种体式格式是:将多种算法策画出来的成果,各取前几个推荐给用户,如许做的益处是成果很雄厚多彩。
一种体式格式是:用svd算法填充后的矩阵作为输入,用通俗cf做策画来输出,然后排序推荐。这种叫做层次推荐,可以获得两种办法的益处。
一种体式格式是:对新用户做基于内容的推荐,因为新用户没有任何评分数据,对老用户用cf来做。
。。。。
组合的体式格式太多了。