⑴ 推荐算法的组合推荐
由于各种推荐方法都有优缺点,所以在实际中,组合推荐(Hybrid
Recommendation)经常被采用。研究和应用最多的是内容推荐和协同过滤推荐的组合。最简单的做法就是分别用基于内容的方法和协同过滤推荐方法去产生一个推荐预测结果,然后用某方法组合其结果。尽管从理论上有很多种推荐组合方法,但在某一具体问题中并不见得都有效,组合推荐一个最重要原则就是通过组合后要能避免或弥补各自推荐技术的弱点。
在组合方式上,有研究人员提出了七种组合思路:1)加权(Weight):加权多种推荐技术结果。2)变换(Switch):根据问题背景和实际情况或要求决定变换采用不同的推荐技术。3)混合(Mixed):同时采用多种推荐技术给出多种推荐结果为用户提供参考。4)特征组合(Feature
combination):组合来自不同推荐数据源的特征被另一种推荐算法所采用。5)层叠(Cascade):先用一种推荐技术产生一种粗糙的推荐结果,第二种推荐技术在此推荐结果的基础上进一步作出更精确的推荐。6)特征扩充(Feature
augmentation):一种技术产生附加的特征信息嵌入到另一种推荐技术的特征输入中。7)元级别(Meta-level):用一种推荐方法产生的模型作为另一种推荐方法的输入。
⑵ 简要智能阅读中智能推荐的技术原理
智能推荐算法总的来说分为两种:基于内容的推荐算法和协同过滤推荐算法。
基于内容的推荐算法:
根据内容的相似度(静态的东西)进行推荐,内容不好提取的可以采取贴标签的形式来区分计算内容的相似程度。然后根据用户的喜好设置,关注等进行相似内容推荐。
协同过滤推荐算法:
根据动态信息来进行推荐,即推荐的过程是自动的,推荐结果的产生是系统从用户的购买行为或浏览记录等隐式信息拿到的,无需用户通过填表格等方式来明确自己的喜好。因为这些数据都是要读到内存中进行运算的,所以又叫基于内存的协同过滤(Memory-based Collaborative Filtering),另一种协同过滤算法则是基于模型的协同过滤(Model-based Collaborative Filtering);m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。对于这个问题,用机器学习的思想来建模解决,主流的方法可以分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型来解决。
(https://www.cnblogs.com/chenliyang/p/6548306.html)
而基于内存的协同过滤又有两种:
基于user的协同过滤(用户相似度):通过相似用户的喜好来推荐
基于item的协同过滤(内容相似度):通过用户对项目的不同评分推荐可能让用户打高评分的项目,是项目之间的相似度。
任何一种单一推荐算法都有缺点,我们在实际项目中,可以采用混合推荐算法,融合以上方法,通过串联并联等融合,构造出自己的一套推荐体系。
⑶ 猜你喜欢是如何猜的——常见推荐算法介绍
自从头条系的产品今日头条和抖音火了之后,个性化推荐就进入了大众的视野,如果我们说搜索时人找信息的话,那么推荐就是信息找人。搜索是通过用户主动输入索引信息告诉机器自己想要的东西,那么推荐的这个索引是什么才能让信息找到人呢?
第一类索引是“你的历史”,即基于你以前在平台上对某物品产生的行为(点赞,转发,评论或者收藏),寻找与你产生过相似行为的用户所喜欢的其他物品或者与你喜欢的物品相似的其他物品来为你推荐。这一基于用户行为相似的算法有:协同过滤算法、基于内容的推荐算法和基于标签的推荐算法。
基于用户的协同过滤算法是寻找与A用户有相似行为的所有B用户所喜欢的而A用户还不知道的物品推荐给A用户 。该算法包括两个步骤:
-根据用户所喜欢的物品计算用户间相似度,找到与目标用户相似的用户集合;
-找到该用户集合所喜欢的而目标用户所不知道的物品。
那么,找出一批物品以后哪个先推荐哪个后推荐?用户间相似程度大的先推荐,用户对物品的感兴趣程度大要先推荐。即假设A用户与B用户的相似程度为0.9,与C用户的相似程度为0.7,用户B喜欢物品a和物品b的程度分别为1和2,用户C喜欢物品a和物品b的程度分别为0.1和0.5,那么先推荐物品b。多个用户多个物品,只要拟定了用户间的相似度和用户对物品的感兴趣程度,即可对物品进行打分并且进行综合排序。
基于物品的协同过滤算法是根据用户行为而不是物品本身的相似度来判断物品的相似度 ,即如果物品A和物品B被很多的用户同时喜欢,那么我们就认为物品A和物品B是相似的。该算法也是包括两个步骤:
-根据用户行为计算物品间的相似度;
-根据物品的相似度和用户的历史行为给用户生成推荐列表。
与UserCF相似的是,同样会遇到推荐的先后顺序问题,那么ItemCF所遵循的原则是:物品间相似程度大的先推荐,用户对物品的感兴趣程度大要先推荐。假设用户对物品a和物品b感兴趣的程度分别为1和0.5,物品a与物品c和物品d的相似度分别为0.5和0.1,物品b与物品c和物品d的相似度分别为0.3和0.4,那么先推荐物品d。用户喜欢多个物品,并且多个物品与其他物品都有相似的情况下,只要拟定了用物品间的相似度和用户对物品的感兴趣程度,即可对物品进行打分并且进行综合排序。
协同过滤算法的核心都是通过用户行为来计算相似度,User-CF是通过用户行为来计算用户间的相似度,Item-CF是通过用户行为来计算物品间的相似度。
推荐算法很重要的一个原理是为用户推荐与用户喜欢的物品相似的用户又不知道的物品。物品的协同过滤算法是通过用户行为来衡量物品间的相似(喜欢物品A的用户中,同时喜欢物品B的用户比例越高,物品A与物品B的相似程度越高),而基于内容的推荐算法衡量则是通过物品本身的内容相似度来衡量物品间的相似。
假如,你看了东野圭吾的《解忧杂货店》,那么下次系统会给你推荐东野圭吾的《白夜行》。假设你看了小李子的《泰坦尼克号》,系统再给你推荐小李子的《荒野猎人》。
该算法与前两种不同的是,将用户和物品之间使用“标签”进行联系,让用户对喜欢的物品做记号(标签),将同样具有这些记号(标签)的其他物品认为很大程度是相似的并推荐给用户。其基本步骤如下:
统计用户最常用的标签
对于每个标签,统计最常被打过这个标签次数最多的物品
将具有这些标签最热门的物品推荐给该用户
目前,国内APP中,豆瓣就是使用基于标签的推荐算法做个性化的推荐。
第二类索引是“你的朋友”,基于你的社交好友来进行推荐,即基于社交网络的推荐。例如,微信看一看中的功能“朋友在看”就是最简单的基于社交网络的推荐,只要用户点击公众号文章的“在看”,就会出现在其好友的“朋友在看”的列表中。
复杂一点的算法会考虑用户之间的熟悉程度和兴趣的相似度来进行推荐。目前,在信息流推荐领域,基于社交网络进行推荐的最流行的算法是Facebook的EdgeRank算法,即为用户推荐其好友最近产生过重要行为(评论点赞转发收藏)的信息。
第三类索引是“你所处的环境”,基于你所处的时间、地点等上下文信息进行推荐。例如,我们看到很APP中的“最近最热门”,就是基于时间上下文的非个性化推荐;以及,美团和饿了么这些基于位置提供服务的APP中,“附近商家”这一功能就是基于用户位置进行推荐。高德地图在为用户推荐驾驶路线时,会考虑不同路线的拥堵程度、红绿灯数量等计算路线用和路程距离再进行综合排序推荐。
很多时候,基于时间上下文的推荐会协同过滤这类个性化推荐算法结合使用。例如,在使用协同过滤推荐策略的时候,会将时间作为其中一个因素考虑进入推荐策略中,最近的信息先推荐。
以上就是常见的推荐算法。作为产品人,我们不需要知道如何实现,但是我们必须知道这些推荐算法的原理,知道在什么场景下如何去做推荐才能提升推荐的效率,这才是产品经理的价值所在。
参考资料:《推荐算法实战》项亮
⑷ 推荐系统UserCF和ItemCF
UserCF(User Collaboration Filter),又称 基于用户的协同过滤算法。
协同过滤:就是指众多的用户可以齐心协力,通过不断地和网站互动,使 自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。
而基于用户是指通过分析用户对商品的行为(如浏览、收藏、加入购物车、购买……)计算出哪些用户是兴趣相似的,然后把兴趣相似的用户所关注的商品相互推荐。
举个例子:
由上表可以看出用户A和用户C比较相似,所以把用户A感兴趣的商品4推荐给用户C。
步骤一般分为两步:
再举个详细点的例子:
假设我们这么一些数据(用户(字母) 商品(数字)_行为,):
我们可以给不同的行为赋予不同的评分(假设浏览1分、收藏3分、加入购物车5分、购买10分),得到以下数据:
这样看着比较累,而且也不方便计算,可以把它转换为矩阵形式,称之为 评分矩阵 :
计算相似度
计算相似度的方式有很多,如余弦相似度、切比雪夫距离、欧里几得距离、曼哈顿距离、杰卡德距离、皮尔森系数……计算相似度的方式不同计算出来的相似度也不同。
这里只介绍余弦相似度,其他的请自行网络。
假设有二维向量a,b如下图所示
则他们的余弦相似度为
推广到多维向量a(a1,a2,a3,a4……),b(b1,b2,b3,b4……)
有了公式就能计算出用户相似度了:
推荐列表 = 相似度矩阵 X 评分矩阵
由于用户已经对推荐列表中的一些商品有过行为,所以还要把这些商品给滤除掉
得到最终的推荐列表,其数值代表的意义是用户对商品的感兴趣程度:
ItemCF(Item Collaboration Filter),又称 基于商品(物品)的协同过滤算法。
其原理与UserCF类似,是基于用户对商品的偏好找到相似的商品,然后推荐相似的商品品给他。
计算过程也非常相似,区别在于计算时把UserCF的 评分矩阵转置 ,再计算商品与商品之间的相似度得到 商品之间的相似度矩阵 。
最后的 推荐列表 = 商品之间的相似度矩阵 X 评分矩阵转置
对于电子商务,用户数量一般大大超过商品数量,此时Item CF的计算复杂度较低。
比如在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性进进超过了网站首页对该用户的综合推荐。可以看到,在这种情况下,Item CF 的推荐成为了引导用户浏览的重要手段。基于物品的协同过滤算法,是目前电子商务采用最广泛的推荐算法。
在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。在社交网络站点中,User CF 是一个更好错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。
推荐多样性和精度,各有千秋。
参考:
Spark基于用户的协同过滤算法 https://www.toutiao.com/a6498952374487368205/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=15393016323&utm_medium=toutiao_android
推荐系统_itemCF和userCF
http://blog.csdn.net/u011263983/article/details/51498458
⑸ 手机APP为什么可以像知己一样懂我们
随着互联网的飞速发展,越来越多的手机APP正在丰富着人们的生活。很多人留意到了一个神奇的现象,即购物APP总能推荐自己想要的商品,新闻APP也能精准地把握自己所关注的新闻内容,许多手机APP俨然已经成为了知己般的存在。那么,这到底是怎么实现的呢?
除了APP,现实生活中也不乏通过推荐系统算法优化销售的例子。在美国的沃尔玛超市,有研究人员通过对购物数据进行分析,意外发现跟尿布一起购买的最多的商品是啤酒。背后原因是,美国的家庭中,母亲在家里照顾婴儿,父亲去超市购买尿布,而父亲会顺便为自己购买啤酒。因此,沃尔玛将尿布和啤酒放在一起出售,极大提升了销售收入。
⑹ 协同过滤与分类
[TOC]
本文是《写给程序员的数据挖掘实践指南》的一周性笔记总结。主要涵盖了以下内容:
所谓推荐系统就是系统根据你的行为操作为你推荐你可能想要的其他物品。这在电商平台、音乐平台、资讯推送平台等多有见到。而协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息。其推荐基础是用户评分。这里可以分为两种用户评分,即显式评分与隐式评分。显式评分即日常见到的为物品打分,如对喜好音乐评级等;隐式评分是通过对用户行为的持续性观察,进而发现用户偏好的一种方法,如新闻网页中的推送你经常阅读过的相关内容等。两种评分方法都有自己的问题。
总体来说,协同过滤其运作机制也可以分为两种:
基于用户的推荐是指通过用户的行为偏好,划分相似用户。在相似用户群体之间互相推送一方喜欢而另一方未有过的物品。核心在于相似用户群体的划分。这种推荐方法有自己的局限:
基于用户的过滤其核心是用户群体的划分,其实也就是分类。
这里的距离函数包括三种:曼哈顿距离和欧氏距离。这里以二维举例,更多维情况下类推即可。
两距离函数可以一般化为:
其中,当r=1时,函数为曼哈顿距离;当r=2时,函数为欧氏距离。
算法实现:
在算出距离函数后,通过比对目标用户与所有用户群体的偏好,找到最近邻的用户并给予推荐。
基于用户距离的推荐有一个明显的问题,就是用户评分体系的差异。比如评分极端的用户给喜欢的评最高分,给不喜欢的评最低分;而有些用户倾向于不出现极端评分。即所谓“分数贬值”( Grade Inflation )问题。这种问题的存在可能让基于距离的评分产生偏差。皮尔逊相关系数可以缓解这种问题。
原皮尔逊相关系数公式在实际运用的时候会出现多次迭代的问题,影响计算效率,这里给出了近似公式:
皮尔逊相关系数的用户判断依据不是单纯的用户距离,而是用户的评分一致性:取值在[-1, 1]之间,越接近1则表示两用户的评分一致性越好;反之则反。
python实现:
基于用户推荐的过程中,另一个存在的问题就是由于大部分人的喜爱物品集合的交集过少,存在大量计算值为0的feature的情况。即所谓 稀疏性 问题。一个较容易理解的例子是对书本内容的挖掘。余弦相似度会忽略这种0-0匹配。
余弦相似度:
python实现:
如此多的评估系数,如何进行抉择呢?根据数据特征:
另外值得考虑的一点是,目前为止的推荐都是基于单用户的。即对一个用户的推荐系统只是基于另一个用户。这会存在一些问题。比如虽然虽然两者相似度很高,但是另外一个人有一些怪癖,怪癖的推荐就是不合理的;又比如,在相似度极高的情况下,你不能确定统一账户下的操作是同一个人做出的或者说操作行为是为了用户自身。比如用户考虑购买某件商品作为礼物送给别人,这就是基于别人喜好的购买行为,这种推荐也是不合适的。
对这种问题的解决可以使用群体划分的方法。原理与单用户类似,但是用户的匹配是k个。在这k位最优匹配的用户之间,以相似度的大小为依据设定权重作为物品推荐的条件。此即协同过滤的k近邻。
正如前面提到的基于用户的推荐有复杂度、稀疏性的问题,而基于物品的过滤则可以缓解这些问题。所谓基于物品的过滤是指,我们事先找到最相似的物品,并结合用户对物品的评级结果来生成推荐。前提是要对物品进行相似度匹配,找到一种算法。
这里的调整是指为了减轻用户评分体系的不一致情况(抵消分数贬值),从每个评级结果中减去该用户所有物品的平均分的评级结果。
其中,U表示所有同时对i, j进行评级过的用户的集合。 表示用户u给物品i的评分减去用户u对所有物品的评分的平均值。
在得到所有物品的余弦相似度后,我们就可以通过该指数预测用户对某件物品的偏好程度。方法就是所有相似物品的相似度乘以得分的总和。
其中p(u, i)指的是用户u对物品i评分的预测值。N是用户u的所有评级物品中每个和i得分相似的物品。这里的相似指的是矩阵中存在N和i的一个相似度得分。 是i和N之间的相似度得分。 是u给N的评级结果。公式较好运行的条件是 取值在(-1, 1)之间,这里就要使用归一化概念。
另一种常用的基于物品过滤的算法就是 slope one 算法。它的大概原理是预测用户u对产品j的评分时,预先计算包含所有物品的两物品偏差表;根据u的已评价的所有物品评分与该物品和产品j的偏差( )之和并乘以所有对此两类物品有过评分的用户个数,一一加总,除以所有同时对产品i与u评价过的所有物品有过评分的用户的人数,得到得分。公式如下:
其中, ; 是利用加权s1算法给出的用户u对物品j的预测值。 指的是对所有除j之外u打过分的物品。
python实现:
在前面两节中,基于物品和基于用户的过滤其前提都是用户需要对已有的item进行评分。而实际上,如果一个新的item出现,由于缺乏别人的偏好,他永远不会被推荐。这就是推荐系统中所谓的—— 冷启动 问题。基于用户评价的系统就会出现这种问题。
冷启动 问题的解决方案之一就是 基于物品属性的过滤 来进行推荐:对物品自身的属性进行归纳总结,并以此进行物品推荐。基于物品属性的过滤存在一个问题同样是量纲的不统一。如果量纲不统一极端值将会对推荐系统造成大麻烦。解决方法也很简单:归一化。此章使用的是z-评分。
使用z得分也存在问题,就是极易受到离群值的影响。这里可以使用 改进的标准分数 来缓解这个问题:
什么时候可以进行归一化呢?
这里用曼哈顿距离举例基于物品属性的过滤:
在上一章最后一节对于用户是否喜欢某件item的判别中,实际上包含了分类器的思想:分类器就是利用对象属性判定对象属于哪个组或类别的程序。这里简单用另一个小项目来说明。
简单来说就是根据运动员的某些指标来判断这位运动员属于什么类别的运动员。
准确率有0.8。
⑺ 矩阵分解在协同过滤推荐算法中的应用
矩阵分解在协同过滤推荐算法中的应用
推荐系统是当下越来越热的一个研究问题,无论在学术界还是在工业界都有很多优秀的人才参与其中。近几年举办的推荐系统比赛更是一次又一次地把推荐系统的研究推向了高潮,比如几年前的Neflix百万大奖赛,KDD CUP 2011的音乐推荐比赛,去年的网络电影推荐竞赛,还有最近的阿里巴巴大数据竞赛。这些比赛对推荐系统的发展都起到了很大的推动作用,使我们有机会接触到真实的工业界数据。我们利用这些数据可以更好地学习掌握推荐系统,这些数据网上很多,大家可以到网上下载。
推荐系统在工业领域中取得了巨大的成功,尤其是在电子商务中。很多电子商务网站利用推荐系统来提高销售收入,推荐系统为Amazon网站每年带来30%的销售收入。推荐系统在不同网站上应用的方式不同,这个不是本文的重点,如果感兴趣可以阅读《推荐系统实践》(人民邮电出版社,项亮)第一章内容。下面进入主题。
为了方便介绍,假设推荐系统中有用户集合有6个用户,即U={u1,u2,u3,u4,u5,u6},项目(物品)集合有7个项目,即V={v1,v2,v3,v4,v5,v6,v7},用户对项目的评分结合为R,用户对项目的评分范围是[0, 5]。R具体表示如下:
推荐系统的目标就是预测出符号“?”对应位置的分值。推荐系统基于这样一个假设:用户对项目的打分越高,表明用户越喜欢。因此,预测出用户对未评分项目的评分后,根据分值大小排序,把分值高的项目推荐给用户。怎么预测这些评分呢,方法大体上可以分为基于内容的推荐、协同过滤推荐和混合推荐三类,协同过滤算法进一步划分又可分为基于基于内存的推荐(memory-based)和基于模型的推荐(model-based),本文介绍的矩阵分解算法属于基于模型的推荐。
矩阵分解算法的数学理论基础是矩阵的行列变换。在《线性代数》中,我们知道矩阵A进行行变换相当于A左乘一个矩阵,矩阵A进行列变换等价于矩阵A右乘一个矩阵,因此矩阵A可以表示为A=PEQ=PQ(E是标准阵)。
矩阵分解目标就是把用户-项目评分矩阵R分解成用户因子矩阵和项目因子矩阵乘的形式,即R=UV,这里R是n×m, n =6, m =7,U是n×k,V是k×m。直观地表示如下:
高维的用户-项目评分矩阵分解成为两个低维的用户因子矩阵和项目因子矩阵,因此矩阵分解和PCA不同,不是为了降维。用户i对项目j的评分r_ij =innerproct(u_i, v_j),更一般的情况是r_ij =f(U_i, V_j),这里为了介绍方便就是用u_i和v_j内积的形式。下面介绍评估低维矩阵乘积拟合评分矩阵的方法。
首先假设,用户对项目的真实评分和预测评分之间的差服从高斯分布,基于这一假设,可推导出目标函数如下:
最后得到矩阵分解的目标函数如下:
从最终得到得目标函数可以直观地理解,预测的分值就是尽量逼近真实的已知评分值。有了目标函数之后,下面就开始谈优化方法了,通常的优化方法分为两种:交叉最小二乘法(alternative least squares)和随机梯度下降法(stochastic gradient descent)。
首先介绍交叉最小二乘法,之所以交叉最小二乘法能够应用到这个目标函数主要是因为L对U和V都是凸函数。首先分别对用户因子向量和项目因子向量求偏导,令偏导等于0求驻点,具体解法如下:
上面就是用户因子向量和项目因子向量的更新公式,迭代更新公式即可找到可接受的局部最优解。迭代终止的条件下面会讲到。
接下来讲解随机梯度下降法,这个方法应用的最多。大致思想是让变量沿着目标函数负梯度的方向移动,直到移动到极小值点。直观的表示如下:
其实负梯度的负方向,当函数是凸函数时是函数值减小的方向走;当函数是凹函数时是往函数值增大的方向移动。而矩阵分解的目标函数L是凸函数,因此,通过梯度下降法我们能够得到目标函数L的极小值(理想情况是最小值)。
言归正传,通过上面的讲解,我们可以获取梯度下降算法的因子矩阵更新公式,具体如下:
(3)和(4)中的γ指的是步长,也即是学习速率,它是一个超参数,需要调参确定。对于梯度见(1)和(2)。
下面说下迭代终止的条件。迭代终止的条件有很多种,就目前我了解的主要有
1) 设置一个阈值,当L函数值小于阈值时就停止迭代,不常用
2) 设置一个阈值,当前后两次函数值变化绝对值小于阈值时,停止迭代
3) 设置固定迭代次数
另外还有一个问题,当用户-项目评分矩阵R非常稀疏时,就会出现过拟合(overfitting)的问题,过拟合问题的解决方法就是正则化(regularization)。正则化其实就是在目标函数中加上用户因子向量和项目因子向量的二范数,当然也可以加上一范数。至于加上一范数还是二范数要看具体情况,一范数会使很多因子为0,从而减小模型大小,而二范数则不会它只能使因子接近于0,而不能使其为0,关于这个的介绍可参考论文Regression Shrinkage and Selection via the Lasso。引入正则化项后目标函数变为:
(5)中λ_1和λ_2是指正则项的权重,这两个值可以取一样,具体取值也需要根据数据集调参得到。优化方法和前面一样,只是梯度公式需要更新一下。
矩阵分解算法目前在推荐系统中应用非常广泛,对于使用RMSE作为评价指标的系统尤为明显,因为矩阵分解的目标就是使RMSE取值最小。但矩阵分解有其弱点,就是解释性差,不能很好为推荐结果做出解释。
后面会继续介绍矩阵分解算法的扩展性问题,就是如何加入隐反馈信息,加入时间信息等。
⑻ 推荐算法-协同过滤3 基于物品
amazon , netflix, hulu , youtube
ItemCF 并不利用物品的内容属性计算物品之间的相似度,他主要通过分析用户行为记录物品的相似度。
算法认为:A 和B 相似,是由于喜欢A 的用户大都也喜欢B
利用用户的历史行为给推荐结果提供推荐解释。例如喜欢或者收藏过的射雕,推荐天龙八部。
1、计算物品相似度
2、根据物品相似度和用户的历史行为生成推荐列表
Wij = |同时喜欢物品i,j 的人数| / |喜欢物品i的人数|
惩罚热门物品:
Wij = |同时喜欢物品i,j 的人数| / sqrt(喜欢i 的人数x 喜欢j的人数) **
计算用户u对一个物品的兴趣:
Puj = sum(Sji, Rui) j (- 和j 最类似的k个物品集合
该公式的含义是:
**和用户历史上感兴趣的物品越相似的物品,越可能在用户的推荐列表中获得高排名。
itemCF 流行度效果更好些,但是准确率随k值提高没有改善。
1、IUF
Sij = cij /match.sqrt(N[i]*N[j]) 计算物品相似度
弱化,那么仅仅忽略 Cij = (1+1/log(1+N(u))
2、当然也可以忽略掉活跃度过高的用户。
W' ij = wij / maxJ(wij) 按类归一化
归一化后,覆盖率能够提高4个百分点