❶ 协同过滤
协同过滤(Collaborative Filtering,CF)——经典/老牌
只用户行为数据得到。对于 个用户, 个物品,则有共现矩阵 :
对于有正负反馈的情况,如“赞”是1和“踩”是-1,无操作是0:
对于只有显示反馈,如点击是1,无操作是0:
算法步骤:
1)得到共现矩阵 ;
2)计算 任意两行 用户相似度,得到用户相似度矩阵 ;
3)针对某个用户 选出与其最相似的 个用户, 是超参数;——召回阶段
4)基于这 个用户,计算 对每个物品的得分;
5)按照用户 的物品得分进行排序,过滤已推荐的物品,推荐剩下得分最高的 个。——排序阶段
第2步中,怎么计算用户相似度?——使用共现矩阵的行
以余弦相似度为标准,计算 和 之间的相似度:
第4步中,怎么每个用户对每个物品的得分?
假如和用户 最相似的2个为 和 :
对物品 的评分为1,用户 对物品 的评分也为1,那么用户 对 的评分为:
也就是说:利用用户相似度对用户评分进行加权平均:
其中, 为用户 和用户 之间的相似度, 为用户 和物品 之间的相似度。
UserCF的缺点
1、现实中用户数远远大于物品数,所以维护用户相似度矩阵代价很大;
2、共现矩阵是很稀疏的,那么计算计算用户相似度的准确度很低。
算法步骤:
1)得到共现矩阵 ;
2)计算 任意两列 物品相似度,得到物品相似度矩阵 ;
3)对于有正负反馈的,获得用户 正反馈的物品;
4)找出用户 正反馈的物品最相似的 个物品,组成相似物品集合;——召回阶段
5)利用相似度分值对相似物品集合进行排序,生产推荐列表。——排序阶段
最简单情况下一个物品(用户未接触的)只出现在另一个物品(用户已反馈的)的最相似集合中,那么每个用户对每个物品的得分就是相似度。如果一个物品和多个物品最相似怎么办?
如用户正反馈的是 和 ,对于物品 其最相似的是 ,相似度为0.7,对于物品 其最相似的也是 ,相似度为0.6,那么 相似度为:
也就是说:如果一个物品出现在多个物品的 个最相似的物品集合中,那么该物品的相似度为多个相似度乘以对应评分的累加。
其中, 是物品p与物品h的相似度, 是用户u对物品p的评分。
第2步中,怎么计算物品相似度?——使用共现矩阵的列
以余弦相似度为标准,计算 和 之间的相似度:
余弦相似度
皮尔逊相关系数
基于皮尔逊相关系数的改进
UserCF适用于用户兴趣比较分散变换较快的场景,如新闻推荐。
IteamCF适用于用户情趣不叫稳定的场景,如电商推荐。
优点:直观,可解释性强。
缺点:
❷ 协同过滤的算法简介
电子商务推荐系统的一种主要算法。
协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。
与传统文本过滤相比,协同过滤有下列优点:
(1)能够过滤难以进行机器自动基于内容分析的信息。如艺术品、音乐;
(2)能够基于一些复杂的,难以表达的概念(信息质量、品位)进行过滤;
(3)推荐的新颖性。
正因为如此,协同过滤在商业应用上也取得了不错的成绩。Amazon,CDNow,MovieFinder,都采用了协同过滤的技术来提高服务质量。
缺点是:
(1)用户对商品的评价非常稀疏,这样基于用户的评价所得到的用户间的相似性可能不准确(即稀疏性问题);
(2)随着用户和商品的增多,系统的性能会越来越低;
(3)如果从来没有用户对某一商品加以评价,则这个商品就不可能被推荐(即最初评价问题)。
因此,现在的电子商务推荐系统都采用了几种技术相结合的推荐技术。
案例: AMAZON个性化推荐系统先驱 (基于协同过滤)
AMAZON是一个虚拟的网上书店,它没有自己的店面,而是在网上进行在线销售。它提供了高质量的综合节目数据库和检索系统,用户可以在网上查询有关图书的信息。如果用户需要购买的话,可以把选择的书放在虚拟购书篮中,最后查看购书篮中的商品,选择合适的服务方式并且提交订单,这样读者所选购的书在几天后就可以送到家。
AMAZON书店还提供先进的个性化推荐功能,能为不同兴趣偏好的用户自动推荐尽量符合其兴趣需要的书籍。 AMAZON使用推荐软件对读者曾经购买过的书以及该读者对其他书的评价进行分析后,将向读者推荐他可能喜欢的新书,只要鼠标点一下,就可以买到该书;AMAZON能对顾客购买过的东西进行自动分析,然后因人而异的提出合适的建议。读者的信息将被再次保存,这样顾客下次来时就能更容易的买到想要的书。此外,完善的售后服务也是AMAZON的优势,读者可以在拿到书籍的30天内,将完好无损的书和音乐光盘退回AMAZON,AMAZON将原价退款。当然AMAZON的成功还不止于此,如果一位顾客在AMAZON购买一本书,下次他再次访问时,映入眼帘的首先是这位顾客的名字和欢迎的字样。
❸ 协同过滤算法
用户行为数据在网站上最简单的存在形式就是日志,比如用户在电子商务网站中的网页浏览、购买、点击、评分和评论等活动。 用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈 行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为。网站中收集显性反馈的主要方式就是评分和喜欢/不喜欢。隐性反馈行为指的是那些不能明确反应用户喜好 的行为。最具代表性的隐性反馈行为就是页面浏览行为。 按照反馈的明确性分,用户行为数据可以分为显性反馈和隐性反馈,但按照反馈的方向分, 又可以分为正反馈和负反馈。正反馈指用户的行为倾向于指用户喜欢该物品,而负反馈指用户的 行为倾向于指用户不喜欢该物品。在显性反馈中,很容易区分一个用户行为是正反馈还是负反馈, 而在隐性反馈行为中,就相对比较难以确定。
在利用用户行为数据设计推荐算法之前,研究人员首先需要对用户行为数据进行分析,了解 数据中蕴含的一般规律,这样才能对算法的设计起到指导作用。
(1) 用户活跃度和物品流行度
(2) 用户活跃度和物品流行度的关系
一般认为,新用户倾向于浏览热门的物品,因为他 们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品。如果用横坐标表示用户活跃度,纵坐标表示具有某个活跃度的所有用户评过分的物品的平均流行度。图中曲线呈明显下 降的趋势,这表明用户越活跃,越倾向于浏览冷门的物品。
仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法进行了深入研究,提出了很多方法,比如基于邻域的方法(neighborhood-based)、隐语义模型 (latent factor model)、基于图的随机游走算法(random walk on graph)等。在这些方法中, 最著名的、在业界得到最广泛应用的算法是基于邻域的方法,而基于邻域的方法主要包含下面两种算法。
基于用户的协同过滤算法 :这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品
基于物品的协同过滤算法: 这种算法给用户推荐和他之前喜欢的物品相似的物品
基于邻域的算法是推荐系统中最基本的算法,该算法不仅在学术界得到了深入研究,而且在 业界得到了广泛应用。基于邻域的算法分为两大类,一类是基于用户的协同过滤算法,另一类是 基于物品的协同过滤算法。现在我们所说的协同过滤,基本上就就是指基于用户或者是基于物品的协同过滤算法,因此,我们可以说基于邻域的算法即是我们常说的协同过滤算法
(1) 基于用户的协同过滤算法(UserCF)
基于用户的协同过滤算法的基本思想是:在一个在线个性化推荐系统中,当一个用户A需要个性化推荐 时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。
Ø 从上面的描述中可以看到,基于用户的协同过滤算法主要包括两个步骤。 第一步:找到和目标用户兴趣相似的用户集合。 第二步: 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
这里,步骤1的关键是计算两个用户的兴趣相似度,协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v) 为用户v曾经有过正反馈的物品集合。那么我们可以通过以下方法计算用户的相似度:
基于余弦相似度
(2) 基于物品的协同过滤算法(itemCF)
与UserCF同理
(3) UserCF和itemCF的比 较
首先我们提出一个问题,为什么新闻网站一般使用UserCF,而图书、电商网站一般使用ItemCF呢? 首先回顾一下UserCF算法和ItemCF算法的推荐原理。UserCF给用户推荐那些和他有共同兴 趣爱好的用户喜欢的物品,而ItemCF给用户推荐那些和他之前喜欢的物品类似的物品。从这个算 法的原理可以看到,UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF 的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。 在新闻网站中,用户的兴趣不是特别细化,绝大多数用户都喜欢看热门的新闻。个性化新闻推荐更加强调抓住 新闻热点,热门程度和时效性是个性化新闻推荐的重点,而个性化相对于这两点略显次要。因 此,UserCF可以给用户推荐和他有相似爱好的一群其他用户今天都在看的新闻,这样在抓住热 点和时效性的同时,保证了一定程度的个性化。同时,在新闻网站中,物品的更新速度远远快于新用户的加入速度,而且 对于新用户,完全可以给他推荐最热门的新闻,因此UserCF显然是利大于弊。
但是,在图书、电子商务和电影网站,比如亚马逊、豆瓣、Netflix中,ItemCF则能极大地发 挥优势。首先,在这些网站中,用户的兴趣是比较固定和持久的。一个技术人员可能都是在购买 技术方面的书,而且他们对书的热门程度并不是那么敏感,事实上越是资深的技术人员,他们看 的书就越可能不热门。此外,这些系统中的用户大都不太需要流行度来辅助他们判断一个物品的 好坏,而是可以通过自己熟悉领域的知识自己判断物品的质量。因此,这些网站中个性化推荐的 任务是帮助用户发现和他研究领域相关的物品。因此,ItemCF算法成为了这些网站的首选算法。 此外,这些网站的物品更新速度不会特别快,一天一次更新物品相似度矩阵对它们来说不会造成 太大的损失,是可以接受的。同时,从技术上考虑,UserCF需要维护一个用户相似度的矩阵,而ItemCF需要维护一个物品 相似度矩阵。从存储的角度说,如果用户很多,那么维护用户兴趣相似度矩阵需要很大的空间, 同理,如果物品很多,那么维护物品相似度矩阵代价较大
下表是对二者的一个全面的表较:
❹ 基于协同过滤的推荐算法
协同过滤推荐算法是最经典的推荐算法,它的算法思想为 物以类聚,人以群分 ,基本的协同过滤算法基于以下的假设:
实现协同过滤的步骤:
1). 找到相似的Top-N个人或者物品 :计算两两的相似度并进行排序
2). 根据相似的人或物品产生推荐结果 :利用Top-N生成初始推荐结果,然后过滤掉用户已经有过记录或者明确表示不喜欢的物品
那么,如何计算相似度呢?
根据数据类型的不同,相似度的计算方式也不同,数据类型有:
一般的,相似度计算有 杰卡德相似度、余弦相似度、皮尔逊相关系数
在协同过滤推荐算法中,我们更多的是利用用户对物品的评分数据集,预测用户对没有评分过的物品的评分结果。
用户-物品的评分矩阵,根据评分矩阵的稀疏程度会有不同的解决方案。
目的:预测用户1对于物品E的评分
步骤分析:
实现过程
用户之间的两两相似度:
物品之间的两两相似度:
❺ 基于物品的协同过滤算法用户对物品的兴趣度怎么算
1概述信息技来术的井喷式发展使我源国的历史学研究进入了信息化的轨道,历史资源数量巨大。以辛亥革命为例,辛亥革命是中国近代史上具有划时代意义的大事件,并且关于辛亥革命的资料文献众多,研究者搜寻所需信息的成本越来越高。传统搜索引擎缓解了信息检索的压力,但传统的搜索引擎将研究者视为一个群体,未考虑个性化差异,难以满足研究者的个性化需求。因此,需将个性化推荐技术应用于历史领域中。个性化推荐技术根据已有的用户数据,对目标用户进行信息推荐,帮助用户快捷的检索到自己所需要的信息。2基于用户兴趣度的协同过滤算法协同过滤技术是要确定目标用户的最近邻居,确定用户最近邻居是利用用户间的相似性,用户兴趣度是衡量用户相似性最重要的指标。当确定了用户对某类资源的兴趣度时,可以将邻居用户中兴趣度高的资源进行聚类,从而进行资源推荐。2.1用户兴趣度根据用户对网页的浏览行为,可以判断用户对网页的兴趣度,故可利用用户浏览行为计算用户兴趣度[1]。在历史领域中,服务器端..
❻ 协同过滤与分类
[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。
❼ 07_推荐系统算法详解
基于人口统计学的推荐与用户画像、基于内容的推荐、基于协同过滤的推荐。
1、基于人口统计学的推荐机制( Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。
2、对于没有明确含义的用户信息(比如登录时间、地域等上下文信息),可以通过聚类等手段,给用户打上分类标签。
3、对于特定标签的用户,又可以根据预设的规则(知识)或者模型,推荐出对应的物品。
4、用户信息标签化的过程一般又称为 用户画像 ( User Profiling)。
(1)用户画像( User Profile)就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,完美地抽象出一个用户的商业全貌作是企业应用大数据技术的基本方式。
(2)用户画像为企业提供了足够的信息基础,能够帮助企业快速找到精准用户群体以及用户需求等更为广泛的反馈信息。
(3)作为大数据的根基,它完美地抽象出一个用户的信息全貌,为进一步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础。
1、 Content- based Recommendations(CB)根据推荐物品或内容的元数据,发现物品的相关性,再基于用户过去的喜好记录,为用户推荐相似的物品。
2、通过抽取物品内在或者外在的特征值,实现相似度计算。比如一个电影,有导演、演员、用户标签UGC、用户评论、时长、风格等等,都可以算是特征。
3、将用户(user)个人信息的特征(基于喜好记录或是预设兴趣标签),和物品(item)的特征相匹配,就能得到用户对物品感兴趣的程度。在一些电影、音乐、图书的社交网站有很成功的应用,有些网站还请专业的人员对物品进行基因编码/打标签(PGC)。
4、 相似度计算:
5、对于物品的特征提取——打标签(tag)
- 专家标签(PGC)
- 用户自定义标签(UGC)
- 降维分析数据,提取隐语义标签(LFM)
对于文本信息的特征提取——关键词
- 分词、语义处理和情感分析(NLP)
- 潜在语义分析(LSA)
6、 基于内容推荐系统的高层次结构
7、 特征工程
(1)特征( feature):数据中抽取出来的对结果预测有用的信息。
特征的个数就是数据的观测维度。
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
特征工程一般包括特征清洗(采样、清洗异常样本),特征处理和特征选择。
特征按照不同的数据类型分类,有不同的特征处理方法:数值型、类别型、时间型、统计型。
(2)数值型特征处理
用连续数值表示当前维度特征,通常会对数值型特征进行数学上的处理,主要的做法是归一化和离散化。
* 幅度调整归一化:
特征与特征之间应该是平等的,区别应该体现在 特征内部 。
例如房屋价格和住房面积的幅度是不同的,房屋价格可能在3000000~15000000(万)之间,而住房面积在40-300(平方米)之间,那么明明是平等的两个特征,输入到相同的模型中后由于本身的幅值不同导致产生的效果不同,这是不合理的
* 数值型特征处理——离散化
离散化的两种方式:等步长——简单但不一定有效;等频——min -> 25% -> 75% -> max
两种方法对比:
等频的离散化方法很精准,但需要每次都对数据分布进行一遍从新计算,因为昨天用户在淘宝上买东西的价格分布和今天不一定相同,因此昨天做等频的切分点可能并不适用,而线上最需要避免的就是不固定,需要现场计算,所以昨天训练出的模型今天不一定能使用。
等频不固定,但很精准,等步长是固定的,非常简单,因此两者在工业上都有应用。
(3) 类别型特征处理
类别型数据本身没有大小关系,需要将它们编码为数字,但它们之间不能有预先设定的大小关系,因此既要做到公平,又要区分开它们,那么直接开辟多个空间。
One-Hot编码/哑变量:One-Hot编码/哑变量所做的就是将类别型数据平行地展开,也就是说,经过One-Hot编码哑变量后,这个特征的空间会膨胀。
(4) 时间型特征处理
时间型特征既可以做连续值,又可以看做离散值。
连续值:持续时间(网页浏览时长);间隔时间(上一次购买/点击离现在的时间间隔)。
离散值:一天中哪个时间段;一周中的星期几;一年中哪个月/星期;工作日/周末。
(5) 统计型特征处理
加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过多少。
分位线:商品属于售出商品价格的分位线处。
次序性:商品处于热门商品第几位。
比例类:电商中商品的好/中/差评比例。
8、 推荐系统常见反馈数据 :
9、 基于UGC的推荐
用户用标签来描述对物品的看法,所以用户生成标签(UGC)是联系用户和物品的纽带,也是反应用户兴趣的重要数据源。
一个用户标签行为的数据集一般由一个三元组(用户,物品,标签)的集合表示,其中一条记录(u,i,b)表示用户u给物品打上了标签b。
一个最简单的算法:
- 统计每个用户最常用的标签
- 对于每个标签,统计被打过这个标签次数最多的物品
- 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门的物品,推荐给他
- 所以用户u对物品i的兴趣公式为 ,其中 使用户u打过标签b的次数, 是物品i被打过标签b的次数。
简单算法中直接将用户打出标签的次数和物品得到的标签次数相乘,可以简单地表现出用户对物品某个特征的兴趣。
这种方法倾向于给热门标签(谁都会给的标签,如“大片”、“搞笑”等)、热门物品(打标签人数最多)比较大的权重,如果一个热门物品同时对应着热门标签,那它就会“霸榜”,推荐的个性化、新颖度就会降低。
类似的问题,出现在新闻内容的关键字提取中。比如以下新闻中,哪个关键字应该获得更高的权重?
10、 TF-IDF:词频逆文档频率 ( Term Frequency- -Inverse Document Frequency,TF-DF)是一种用于资讯检索与文本挖掘的常用加权技术。
TFDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TFIDF=TF IDF
TF-IDF的主要思想是 :如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-DF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。
词频( Term Frequency,TF) :指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数的归一化,以防止偏向更长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。) ,其中 表示词语 i 在文档 j 中出现的频率, 表示 i 在 j 中出现的次数, 表示文档 j 的总词数。
逆向文件频率( Inverse Document Frequency,IDF) :是一个词语普遍重要性的度量,某一特定词语的IDF,可以由总文档数目除以包含该词语之文档的数目,再将得到的商取对数得到 ,其中 表示词语 i 在文档集中的逆文档频率,N表示文档集中的文档总数, 表示文档集中包含了词语 i 的文档数。
(11) TF-IDF对基于UGC推荐的改进 : ,为了避免热门标签和热门物品获得更多的权重,我们需要对“热门进行惩罚。
借鉴TF-IDF的思想,以一个物品的所有标签作为“文档”,标签作为“词语”,从而计算标签的“词频”(在物品所有标签中的频率)和“逆文档频率”(在其它物品标签中普遍出现的频率)。
由于“物品i的所有标签” 应该对标签权重没有影响,而 “所有标签总数” N 对于所有标签是一定的,所以这两项可以略去。在简单算法的基础上,直接加入对热门标签和热门物品的惩罚项: ,其中, 记录了标签 b 被多少个不同的用户使用过, 记录了物品 i 被多少个不同的用户打过标签。
(一)协同过滤(Collaborative Filtering, CF)
1、基于协同过滤(CF)的推荐:基于内容( Content based,CB)主要利用的是用户评价过的物品的内容特征,而CF方法还可以利用其他用户评分过的物品内容。
CF可以解决CB的一些局限:
- 物品内容不完全或者难以获得时,依然可以通过其他用户的反馈给出推荐。
- CF基于用户之间对物品的评价质量,避免了CB仅依赖内容可能造成的对物品质量判断的干。
- CF推荐不受内容限制,只要其他类似用户给出了对不同物品的兴趣,CF就可以给用户推荐出内容差异很大的物品(但有某种内在联系)
分为两类:基于近邻和基于模型。
2、基于近邻的推荐系统:根据的是相同“口碑”准则。是否应该给Cary推荐《泰坦尼克号》?
(二)基于近邻的协同过滤
1、 基于用户(User-CF): 基于用户的协同过滤推荐的基本原理是,根据所有用户对物品的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,并推荐近邻所偏好的物品。
在一般的应用中是采用计算“K-近邻”的算法;基于这K个邻居的历史偏好信息,为当前用户进行推荐。
User-CF和基于人口统计学的推荐机制:
- 两者都是计算用户的相似度,并基于相似的“邻居”用户群计算推荐。
- 它们所不同的是如何计算用户的相似度:基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。
2、基于物品(Item-CF):基于项目的协同过滤推荐的基本原理与基于用户的类似,只是使用所有用户对物品的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。
Item-CF和基于内容(CB)的推荐
- 其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息。
同样是协同过滤,在基于用户和基于项目两个策略中应该如何选择呢?
- 电商、电影、音乐网站,用户数量远大于物品数量。
- 新闻网站,物品(新闻文本)数量可能大于用户数量。
3、 User-CF和Item-CF的比较
同样是协同过滤,在User-CF和ltem-CF两个策略中应该如何选择呢?
Item-CF应用场景
- 基于物品的协同过滤( Item-CF ) 推荐机制是 Amazon在基于用户的机制上改良的一种策略因为在大部分的Web站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于物品的机制比基于用户的实时性更好一些,所以 Item-CF 成为了目前推荐策略的主流。
User-CF应用场景
- 设想一下在一些新闻推荐系统中,也许物品一一也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的相似度依然不稳定,这时用 User-cf可能效果更好。
所以,推荐策略的选择其实和具体的应用场景有很大的关系。
4、 基于协同过滤的推荐优缺点
(1)基于协同过滤的推荐机制的优点:
它不需要对物品或者用户进行严格的建模,而且不要求对物品特征的描述是机器可理解的,所以这种方法也是领域无关的。
这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。
(2)存在的问题
方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
推荐的效果依赖于用户历史好数据的多少和准确性。
在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
对于一些特殊品味的用户不能给予很好的推荐。
(三)基于模型的协同过滤
1、基本思想
(1)用户具有一定的特征,决定着他的偏好选择
(2)物品具有一定的特征,影响着用户需是否选择它。
(3)用户之所以选择某一个商品,是因为用户特征与物品特征相互匹配。
基于这种思想,模型的建立相当于从行为数据中提取特征,给用户和物品同时打上“标签”;这和基于人口统计学的用户标签、基于内容方法的物品标签本质是一样的,都是特征的提取和匹配。
有显性特征时(比如用户标签、物品分类标签)我们可以直接匹配做出推荐;没有时,可以根据已有的偏好数据,去发据出隐藏的特征,这需要用到隐语义模型(LFM)。
2、基于模型的协同过滤推荐,就是基于样本的用户偏好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测新物品的得分,计算推荐
基于近邻的推荐和基于模型的推荐
- 基于近邻的推荐是在预测时直接使用已有的用户偏好数据,通过近邻数据来预测对新物品的偏好(类似分类)
- 而基于模型的方法,是要使用这些偏好数据来训练模型,找到内在规律,再用模型来做预测(类似回归)
训练模型时,可以基于标签内容来提取物品特征,也可以让模型去发据物品的潜在特征;这样的模型被称为 隐语义模型 ( Latent Factor Model,LFM)。
(1)隐语义模型(LFM):用隐语义模型来进行协同过滤的目标:
- 揭示隐藏的特征,这些特征能够解释为什么给出对应的预测评分
- 这类特征可能是无法直接用语言解释描述的,事实上我们并不需要知道,类似“玄学”
通过矩阵分解进行降维分析
- 协同过滤算法非常依赖历史数据,而一般的推荐系统中,偏好数据又往往是稀疏的;这就需要对原始数据做降维处理。
- 分解之后的矩阵,就代表了用户和物品的隐藏特征
隐语义模型的实例:基于概率的隐语义分析(pLSA)、隐式迪利克雷分布模型(LDA)、矩阵因子分解模型(基于奇异值分解的模型,SVD)
(2)LFM降维方法——矩阵因子分解
(3)LFM的进一步理解
我们可以认为,用户之所以给电影打出这样的分数,是有内在原因的,我们可以挖掘出影响用户打分的隐藏因素,进而根据未评分电影与这些隐藏因素的关联度,决定此未评分电影的预测评分。
应该有一些隐藏的因素,影响用户的打分,比如电影:演员、题材、年代…甚至不定是人直接可以理解的隐藏因子。
找到隐藏因子,可以对user和Iiem进行关联(找到是由于什么使得user喜欢/不喜欢此Item,什么会决定user喜欢/不喜欢此item),就可以推测用户是否会喜欢某一部未看过的电影。
(4)矩阵因子分解
(5)模型的求解——损失函数
(6)模型的求解算法——ALS
现在,矩阵因子分解的问题已经转化成了一个标准的优化问题,需要求解P、Q,使目标损失函数取最小值。
最小化过程的求解,一般采用随机梯度下降算法或者交替最小二乘法来实现交替最小二乘法( Alternating Least Squares,ALS)
ALS的思想是,由于两个矩阵P和Q都未知,且通过矩阵乘法耦合在一起,为了使它们解耦,可以先固定Q,把P当作变量,通过损失函数最小化求出P,这就是一个经典的最小二乘问题;再反过来固定求得的P,把Q当作变量,求解出Q:如此交替执行,直到误差满足阅值条件,或者到达迭代上限。
(7)梯度下降算法
❽ 协同过滤(2): KDD2020- HyperGraph CF 基于超图
协同过滤推荐系统是当今众多推荐系统中最流行和最重要的推荐方法之一。
尽管已经被广泛采用,但是现有的基于 cf 的方法,从矩阵分解到新兴的基于图的方法, 在训练数据非常有限的情况下表现不佳 (数据稀疏问题)。
本文首先指出了造成这种不足的根本原因,并指出现有基于 CF 的方法固有的两个缺点,即: 1)用户和物品建模不灵活; 2)高阶相关性建模不足。
在这种情况下,文中提出了一个双通道超图协同过滤(DHCF)框架来解决上述问题。
首先,引入 双通道学习策略 (Dual-Channel),全面利用分治策略,学习用户和物品的表示,使这两种类型的数据可以优雅地相互连接,同时保持其特定属性。
其次, 利用超图结构对用户和具有显式混合高阶相关性的物品进行建模 。提出了跳跃超图卷积(JHConv)方法,实现高阶关系嵌入的显式和有效传播。
推荐系统的核心是一系列的推荐算法,这些算法能够**根据用户的个人特征有效地从爆炸式信息筛选出信息。协同过滤是目前最受欢迎和广泛采用的方法之一。
CF 持有一个基本的假设,当向用户提供推荐时: 那些行为相似的人(例如,经常访问同一个网站)很可能在物品(例如,音乐、视频、网站)上分享相似的偏好。
为了实现这一点,一个典型的基于 CFbased 方法执行一个两步策略: 它首先利用历史交互区分相似的用户和项目; 然后基于上面收集的信息,向特定用户生成推荐。
现有的 CF 方法可以分为三类。
虽然 CF 方法已经研究了多年,但仍然存在局限性,特别是在训练的先验知识非常有限的情况下。为了理解这些缺陷,深入挖掘现有 CF 方法的内在机制得到以下局限性:
基于这些生成的连接组,即超边,可以分别为用户和物品构造两个超图,即两个通道的表示。本文提出了一种新的跳跃超图卷积算法(JHConv) ,该算法通过聚合邻域的嵌入并引入先验信息,有效地在超图上进行信息传播。(与传统的基于图的方法对比,用户超图和项目超图,可以更灵活地进行复杂的数据关联建模,并与不同类型的数据结合。)
超图定义为 ,V表示图节点, 表示超边集合,超图邻接矩阵 描述节点与超边的关系
在高层次上,DHCF 首先通过一个双通道超图框架学习用户和物品的两组嵌入,在此框架上,DHCF 通过计算用户和物品嵌入查找表的内积,进一步计算出用户-项目偏好矩阵。基于这样的偏好矩阵,DHCF 估计用户对某个商品感兴趣的可能性。
总体分为三步:
构建用户和物品嵌入矩阵:
为了在预定义的混合高阶关系上聚合相邻消息,执行以下高阶消息传递:
为了提取有区别的信息,我们对用户和物品定义为
综上所述,上述两个过程构成了一个集成的DHCF 层,允许对用户和物品进行明确的建模和编码,并通过强大的嵌入功能进一步更新和生成更精确的嵌入超图结构。这种精细嵌入可以进一步应用于推荐系统中的各种下游任务。
与 传统 HGNNConv 相比,JHConv 允许模型同时考虑其原始特征和聚合相关表示,在另一方面,这样的 resnet结构的跳跃连接使模型能够避免由于集成了许多其他连接而导致的信息稀释。
引入高阶关联来实现构建超边,根据自定义的规则分别对用户和物品进行高阶关联提取
定义1: 物品的 k 阶可达邻居。在用户-物品交互图,更具体地说是二部图中,如果在 itemi 和 itemj 之间存在一个相邻顶点序列(即一条路) ,且该路径中的用户数小于 k,itemi (itemj)是 itemi (itemi)的 k 阶可达邻居。
定义2: 物品的 k阶可达用户。在物品-用户二部图中,如果用户 j 和物品 k 之间存在直接交互作用,则用户 j 是 itemi 的 k 阶可达邻居,而物品 k 是 itemi 的 k 阶可达邻居。
对于 itemi,其 k 阶可达用户集称为 。从数学上讲,超图可以定义在一个集簇上,其中每个集代表一个超边。因此,这里可以通过物品的 k 阶可达用户集构建超边。
然后在用户 k 阶可达规则的基础上构造高阶超边组,该超边组可表示为:
假设通过K阶可达规则,构造a个超边组,最后的超图需要将这a个超边组做融合,见上面的总体框架中的描述。
同理,按照相似的K阶可达的规则,对物品进行分析,构成物品的超边(N个用户,M个物品)
在实验中,每个用户观察到的交互中的10% 被随机选择用于训练,其余的数据用于测试。这样的设置增加了 CF 任务的难度,因为模型只能获取非常有限的观察到的交互。此外,由于数据的高度稀疏性,它可以很好地评价模型从有限的隐式数据集中挖掘有用信息的能力。对于所有四个数据集,每个用户至少有两个用于训练的交互。
这篇工作基于超图结构,提出了一种新的CF框架,与基于图神经网络的CF相比,超图结构更符合实际情况;此外,双通道的思路也值得借鉴,之前也分析的一篇双通道BPR的论文。近年来,基于图神经网络的推荐已经成为研究主流,而其中超图相关的工作少之又少,最近看到的另一篇是SIGIR2020上的一篇Next Item Recommendation with Sequential Hypergraphs,在超图神经网络上并没多大的改进,重点仍然在于如何用这种结构去解决存在的问题。
如果觉得有用,欢迎点赞关注赞赏,若对推荐感兴趣欢迎评论区/私信交流~~~
❾ k近邻协同过滤和协同过滤算法的区别
协同过滤算法
协同过滤(Collaborative filtering, CF)算法是目前个性化推荐系统比较流行的算法之一。
协同算法分为两个基本算法:基于用户的协同过滤(UserCF)和基于项目的协同过滤(ItemCF)。
最近这段时间,多数人都选择使用被称为个性化协同推荐(Personalized Collaborative Recommender)的算法。这也是亚马逊、Netflix、Facebook 的好友推荐,以及一家英国流行音乐网站 Last.fm 的核心算法。说它 “个性化”,是因为这种算法会追踪用户的每一个行为(如浏览过的页面、订单记录和商品评分),以此进行推荐;它们可不是瞎猫碰上死耗子——全凭运气。说它 “协同”,则是因为这种算法会根据许多其他的顾客也购买了这些商品或者对其显示出好感,而将两样物品视为彼此关联,它不是通过分析商品特征或者关键词来进行判断的。
❿ 推荐系统论文阅读(二十三)-神经图协同过滤NGCF
论文:
论文题目:《Neural Graph Collaborative Filtering》
论文地址: https://arxiv.org/pdf/1905.08108.pdf
本论文是关于图结构的协同过滤算法,在原始的矩阵分解和基于深度学习的方法中,通常是通过映射描述用户(或物品)的现有特征(例如ID和属性)来获得用户(或物品)的嵌入。从而利用user和item的embedding进行协同召回。但是作者认为这种方法的固有缺点是:在user与item的interaction数据中潜伏的 协作信号(collaborative signal) 未在嵌入过程中进行编码。这样,所得的嵌入可能不足以捕获协同过滤效果。
让我们一起来看一下本论文是怎么利用数据中潜伏的协作信号的吧。
推荐算法被广泛的运用在各个领域中,在电商领域,社交媒体,广告等领域都发挥着至关重要的作用。推荐系统的核心内容就是根据用户以前的购买和点击行为来评估用户对一个物品的喜爱程度,从而针对每个用户进行个性化推荐。协同过滤算法认为历史行为相似的用户之间的兴趣是相同的,所以给用户推荐的是同类型用户的爱好,也就是UserCF,而ItemCF给用户推荐的是跟历史行为相近的物品。
传统的协同过滤方法要么是基于矩阵分解,要么是基于深度学习的,这两种方法都忽略了一个非常关键的信息---user和item交互的协作信号,该信号隐藏在user和item的交互过程中。原始的协同过滤方法忽略了这种信息,所以在进行user 和 item representation时就不足以较好的进行embedding。
本论文通过将用户项交互(更具体地说是二分图结构)集成到embedding过程中,开发了一个新的推荐框架神经图协同过滤(NGCF),该框架通过在其上传播embedding来利用user-item图结构。这种方法在用户项目图中进行高阶连通性的表达建模,从而以显式方式将协作信号有效地注入到embedding过程中。
在介绍模型之前先来讲解一下什么是useritem interaction以及什么是高阶的useritem interaction。
我们先看左边的图,这个图就是useritem interaction,u1是我们待推荐的用户,用双圆圈表示,他交互过的物品有i1,i2,i3。在看右边这个树形结构的图,这个图是u1的高阶interaction图,注意只有l > 1的才是u1的高阶连接。观察到,这么一条路径,u1 ← i2 ← u2,指示u1和u2之间的行为相似性,因为两个用户都已与i2进行了交互。而另一条更长的路径,u1←i2←u2←i4暗示u1可能会点击i4,因为他的相似用户u2之前已经购买过i4。另一方面,用户u1在l = 3这一层会更倾向于i4而不是i5,理由是i4到u1有两条路径而i5只有一条。
当然这种树结构是不可能通过构建真正的树节点来表示的,因为树模型比较复杂,而且结构很大,没法对每个用户构建一个树,这样工作量太大了。那么怎么设计模型结构可以达到跟这个high-order connectivity的效果呢,这个就要运用到神经网络了。通过设计一个embedding propagation layer来表示这种embedding 在每个层之间的传递。
还是拿上面那张图举例子,堆叠两层可捕获u1←i2←u2的行为相似性,堆叠三层可捕获u1←i2←u2←i4的潜在推荐以及信息流的强度(由层之间的可训练权重来评估),并确定i4和i5的推荐优先级。
这个跟传统的embedding是一样的,都是对原始的userID和itemID做embedding,跟传统embedding不同的地方是,在我们的NGCF框架中,我们通过在用户-项目交互图上传播embedding来优化embedding。 由于embedding优化步骤将协作信号显式注入到embedding中,因此可以为推荐提供更有效的embedding。
这一层是本文的核心内容,下面我们来进行详细的解读。
从直观上来看,用户交互过的item会给用户的偏好带来最直接的依据。类似地,交互过某个item的用户可以视为该item的特征,并可以用来衡量两个item的协同相似性。 我们以此为基础在连接的用户和项目之间执行embedding propogation,并通过两个主要操作来制定流程:消息构建和消息聚合。
Message Construction(消息构建)
对于连接的user-item对(u,i),我们定义从i到u的消息为:
其中ei是i的embedding,eu是u的embedding,pui是用于控制每次传播的衰减因子,函数f是消息构建函数,f的定义为:
其中W1和W2用来提取有用的embedding信息,可以看到W2控制的i和u直接的交互性,这使得消息取决于ei和eu之间的亲和力,比如,传递更多来自相似项的消息。
另一个重要的地方是Nu和Ni,pui = 1/ 。Nu和Ni表示用户u和item i的第一跳邻居。 从表示学习的角度来看,pui反映了历史item对用户偏好的贡献程度。 从消息传递的角度来看,考虑到正在传播的消息应随路径长度衰减,因此pui可以解释为折扣因子。
Message Aggregation
聚合方法如下 :
其中 表示在第一嵌入传播层之后获得的用户u的表示。激活函数采用的是leakyrelu,这个函数适合对pos和neg信号进行编码。
另一个重要的信息是 ,它的定义如下:
这个信息的主要作用是保留原始的特征信息。
至此,我们得到了 ,同样的方法,我们也能获得 ,这个都是first order connectivoty的信息。
根据前面的计算方式,我们如果将多个Embedding Propagation Layers进行堆叠,我们就可以得到high order connectivity信息了:
计算方式如下:
当我看到这里的时候,我的脑子里产生了一个大大的疑惑,我们在计算第l层的eu和ei时都需要第l-1层的信息,那么我们怎么知道ei和eu在第l层是否存在呢?也就是说出现u侧的总层数l大于i侧总层数的时候,我们如何根据第l-1层的ei来计算第l层的e呢?经过思考,我感觉应该是这样的,训练样本应该是一条path,也就是这个例子是u1 ← i2 ← u2 ← i4这条path,所以可以保证u1跟i4的层数l是一样的,所以不存在上面那个层数不匹配的问题。
ps:看到后面的实验结果才知道L是固定的所以每一层都不会缺失。
还有一个就是,不同层之间的W是不一样的,每一层都有着自己的参数,这个看公式就知道,理由就是我们在提取不同层信息的时候需要不同的W进行信息提取。
另一个疑惑是pui到底是不是每一个l层都一样?这里看公式好像就是指的是第一跳的Nu和Ni进行就计算的结果。
这部分内容是为了在进行batch训练的时候进行矩阵运算所推导的数学过程,其实跟之前我们讲的那个过程在数学上的计算是完全一样的,你想象一下,如果不用矩阵进行运算,在训练过程中要如何进行这么复杂的交互运算。
当进行了l层的embedding propagation后,我们就拥有了l个eu和l个ei,我们将他们进行concate操作:
这样,我们不仅可以通过嵌入传播层丰富初始嵌入,还可以通过调整L来控制传播范围。
最后,我们进行内积计算,以评估用户对目标商品的偏好:
采用的是pair-wise方式中的bpr loss: