导航:首页 > 净水问答 > python实现协同过滤

python实现协同过滤

发布时间:2024-04-21 05:40:21

Ⅰ 推荐算法的基于协同过滤的推荐

基于协同过滤的推荐算法理论上可以推荐世界上的任何一种东西。图片、音乐、样样可以。 协同过滤算法主要是通过对未评分项进行评分 预测来实现的。不同的协同过滤之间也有很大的不同。
基于用户的协同过滤算法: 基于一个这样的假设“跟你喜好相似的人喜欢的东西你也很有可能喜欢。”所以基于用户的协同过滤主要的任务就是找出用户的最近邻居,从而根据最近邻 居的喜好做出未知项的评分预测。这种算法主要分为3个步骤:
一,用户评分。可以分为显性评分和隐形评分两种。显性评分就是直接给项目评分(例如给网络里的用户评分),隐形评分就是通过评价或是购买的行为给项目评分 (例如在有啊购买了什么东西)。
二,寻找最近邻居。这一步就是寻找与你距离最近的用户,测算距离一般采用以下三种算法:1.皮尔森相关系数。2.余弦相似性。3调整余弦相似性。调整余弦 相似性似乎效果会好一些。
三,推荐。产生了最近邻居集合后,就根据这个集合对未知项进行评分预测。把评分最高的N个项推荐给用户。 这种算法存在性能上的瓶颈,当用户数越来越多的时候,寻找最近邻居的复杂度也会大幅度的增长。
因而这种算法无法满足及时推荐的要求。基于项的协同过滤解决了这个问题。 基于项的协同过滤算法 根基于用户的算法相似,只不过第二步改为计算项之间的相似度。由于项之间的相似度比较稳定可以在线下进行,所以解决了基于用户的协同过滤算法存在的性能瓶颈。

Ⅱ 协同过滤与分类

[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。

Ⅲ 濡備綍鑷瀛︾紪绋媝ython

棣栧厛鍏堜簡瑙Python璇瑷鐨勫洓澶у彂灞曟柟鍚戙傜洰鍓峆ython鐨勪富瑕佹柟鍚戞湁web鍚庣寮鍙戙佸ぇ鏁版嵁鍒嗘瀽缃戠粶鐖铏鍜屼汉宸ユ櫤鑳斤紝褰撶劧濡傛灉鍐嶇粏鍒嗙殑璇濊繕鏈夎嚜鍔ㄥ寲娴嬭瘯銆佽繍缁寸瓑鏂瑰悜銆

鍦ㄥ︿範Python鐨勫熀纭璇娉曟椂锛屽苟涓嶉渶瑕佸お澶氱殑鍩虹锛屽熀鏈鍙瑕佺啛缁冧娇鐢ㄧ數鑴戞棩甯稿姛鑳藉苟瀵筆ython鎰熷叴瓒e氨鍙浠ヤ簡锛屼絾濡傛灉鎯宠佸湪浜哄伐鏅鸿兘棰嗗煙鏂瑰悜鍙戝睍鐨勮瘽锛岀嚎鎬т唬鏁般佹傜巼銆佺粺璁$瓑楂樼瓑鏁板︾煡璇嗗熀鏈鏄蹇呴渶鐨勶紝鍘熷洜鍦ㄤ簬杩欎簺鐭ヨ瘑鑳藉熻╀綘鐨勯昏緫鏇村姞娓呮櫚锛屽湪缂栫▼杩囩▼涓鏈夋洿寮虹殑鎬濊矾銆

鍒嗕韩涓涓鍗冮攱Python鐨勫︿範澶х翰缁欎綘

绗涓闃舵 - Python 鏁版嵁绉戝

Python 鍩虹璇娉

鍏ラ棬鍙婄幆澧冨畨瑁 銆佸熀鏈璇娉曚笌鏁版嵁绫诲瀷銆佹帶鍒惰鍙ャ侀敊璇鍙婂紓甯搞侀敊璇澶勭悊鏂规硶銆佸紓甯稿勭悊鏂规硶 銆佸父鐢ㄥ唴缃鍑芥暟 銆佸嚱鏁板垱寤轰笌浣跨敤銆丳ython 楂樼骇鐗规с侀珮绾у嚱鏁般丳ython 妯″潡銆丳ythonIO 鎿嶄綔 銆佹棩鏈熶笌鏃堕棿 銆佺被涓庨潰鍚戝硅薄 銆丳ython 杩炴帴鏁版嵁搴

Python 鏁版嵁娓呮礂

鏁板瓧鍖 Python 妯″潡Numpy銆佹暟鎹鍒嗘瀽鍒╁櫒Pandas銆丳andas 鍩烘湰鎿嶄綔銆丳andas 楂樼骇鎿嶄綔

Python 鏁版嵁鍙瑙嗗寲

鏁版嵁鍙瑙嗗寲鍩虹銆丮Llib锛圧DD-Base API锛夋満鍣ㄥ︿範銆丮atPlotlib 缁樺浘杩涢樁銆侀珮绾х粯鍥惧伐鍏

绗浜岄樁娈 - 鍟嗕笟鏁版嵁鍙瑙嗗寲

Excel 涓氬姟鍒嗘瀽

Excel 鍩虹鎶鑳姐丒xcel 鍏寮忓嚱鏁般佸浘琛ㄥ彲瑙嗗寲銆佷汉鍔 & 璐㈠姟鍒嗘瀽妗堜緥銆佸晢涓氭暟鎹鍒嗘瀽鏂规硶銆佸晢涓氭暟鎹鍒嗘瀽鎶ュ憡

Mysql 鏁版嵁搴

Mysql 鍩虹鎿嶄綔锛堜竴锛夈丮ysql 鍩虹鎿嶄綔锛堜簩锛夈丮ysql 涓绾ф搷浣溿丮ysql 楂樼骇鎿嶄綔銆佺數鍟嗘暟鎹澶勭悊妗堜緥

PowerBI

鍒濈骇鍟嗕笟鏅鸿兘搴旂敤 锛圥owerQuery锛夈佸垵绾у晢涓氭櫤鑳藉簲鐢 锛圥owerPivot锛夈佸垵绾у晢涓氭櫤鑳藉簲鐢ㄦ堜緥銆佸瓨鍌ㄨ繃绋嬨丳owerBI Desktop 妗堜緥銆丳owerBI Query 妗堜緥

缁熻″﹀熀纭

寰绉鍒嗐佺嚎鎬т唬鏁板熀纭銆佺粺璁″熀纭

Tableau

Tableau 鍩烘湰鎿嶄綔銆乀ableau 缁樺浘銆乀ableau 鏁版嵁鍒嗘瀽銆乀ableau 娴侀噺鍒嗘瀽

SPSS

瀹㈡埛鐢诲儚銆佸㈡埛浠峰兼ā鍨嬨佺炵粡缃戠粶銆佸喅绛栨爲銆佹椂闂村簭鍒

绗涓夐樁娈 - Python 鏈哄櫒瀛︿範

Python 缁熻″垎鏋

鏁版嵁鍑嗗囥佷竴鍏冪嚎鎬у洖褰掋佸氬厓绾挎у洖褰掋佷竴鑸 logistic 鍥炲綊銆乷gistic 鍥炲綊涓庝慨姝

Python 鏈哄櫒瀛︿範鍩虹

鏈哄櫒瀛︿範鍏ラ棬銆並NN 璁蹭箟銆佹ā鍨嬭瘎浼版柟娉曘佹ā鍨嬩紭鍖栨柟娉曘並means銆丏BSCAN銆佸喅绛栨爲绠楁硶瀹炴垬

Python 鏈哄櫒瀛︿範涓绾

绾挎у洖褰掋佹ā鍨嬩紭鍖栨柟娉曘侀昏緫鍥炲綊銆佹湸绱犺礉鍙舵柉銆佸叧鑱旇勫垯銆佸崗鍚岃繃婊ゃ佹帹鑽愮郴缁熸堜緥

Python 鏈哄櫒瀛︿範楂樼骇

闆嗘垚绠楁硶 - 闅忔満妫鏋椼侀泦鎴愮畻娉 -AdaBoost銆佹暟鎹澶勭悊鍜岀壒寰佸伐绋嬨丼VM銆佺炵粡缃戠粶銆乆GBoost

绗鍥涢樁娈 - 椤圭洰瀹炴垬

鐢靛晢甯傚満鏁版嵁鎸栨帢椤圭洰瀹炴垬

椤圭洰鑳屾櫙 & 涓氬姟閫昏緫 銆佹寚瀹氬垎鏋愮瓥鐣 銆佹柟娉曞疄鐜颁笌缁撴灉 銆佽惀閿娲诲姩璁捐″強缁撴灉璇勪环 銆佹挵鍐欐暟鎹鍒嗘瀽鎶ュ憡

閲戣瀺椋庨櫓淇$敤璇勪及椤圭洰瀹炴垬

椤圭洰鑳屾櫙 & 涓氬姟閫昏緫 銆佸缓妯″噯澶 銆佹暟鎹娓呮礂 銆佹ā鍨嬭缁 銆佹ā鍨嬭瘎浼 銆佹ā鍨嬮儴缃蹭笌鏇存柊

绗浜旈樁娈 - 鏁版嵁閲囬泦

鐖铏绫诲簱瑙f瀽 銆佹暟鎹瑙f瀽 銆佸姩鎬佺綉椤垫彁鍙 銆侀獙璇佺爜銆両P 姹 銆佸氱嚎绋嬬埇铏 銆佸弽鐖搴斿规帾鏂 銆乻crapy 妗嗘灦

绗鍏闃舵 - 浼佷笟璇

鍥㈤槦鎴峰栨嫇灞曡缁 銆佷紒涓氬悎浣滈」鐩璇剧▼ 銆佺$悊璇剧▼ 銆佹矡閫氳〃杈捐缁 銆佽亴涓氱礌鍏昏剧▼

浠ヤ笂灏辨槸闆跺熀纭Python瀛︿範璺绾跨殑鎵鏈夊唴瀹癸紝甯屾湜瀵瑰ぇ瀹剁殑瀛︿範鏈夋墍甯鍔┿

Ⅳ Python实现协同过滤推荐算法,用的大一些的数据集就报错MemoryError

  1. python虽然易用,但是内存占用比较多;所以如果你有C/C++/Java基础,考虑用这些语专言来实现;

  2. CF算法属需要计算大量的相似度,如果能把中间结果存起来,或者简化计算过程(如,你可能会重复计算一个item的均值)可以省下不少内存;(个人试过计算1w个用户Pearson是没问题的)

  3. 如果内存实在不够用,那就用时间换空间,把中间计算结果分成小文件存到磁盘上,用的时候再读取。

    供参考。

Ⅳ 协同过滤中的可扩展性问题是什么

协同过滤算法能够容易地为几千名用户提供较好的推荐,但是对于电子商务网站,往往需要给成百上千万的用户提供推荐,这就一方面需要提高响应时间的要求,能够为用户实时地进行推荐;另一方面还应考虑到存储空间的要求,尽量减少推荐系统运行的负担。

1.3 可扩展性问题

在协同过滤推荐算法中,全局数值算法能及时利用最新的信息为用户产生相对准确的用户兴趣度预测或进行推荐,但是面对日益增多的用户,数据量的急剧增加,算法的扩展性问题(即适应系统规模不断扩大的问题)成为制约推荐系统实施的重要因素。虽然与基于模型的算法相比,全局数值算法节约了为建立模型而花费的训练时间,但是用于识别“最近邻居”算法的计算量随着用户和项的增加而大大增加,对于上百万的数目,通常的算法会遇到严重的扩展性瓶颈问题。该问题解决不好,直接影响着基于协同过滤技术的推荐系统实时向用户提供推荐问题的解决,而推荐系统的实时性越好,精确度越高,该系统才会被用户所接受。

基于模型的算法虽然可以在一定程度上解决算法的可扩展性问题,但是该类算法往往比较适于用户的兴趣爱好比较稳定的情况,因为它要考虑用户模型的学习过程以及模型的更新过程,对于最新信息的利用比全局数值算法要差些。

分析以上协同过滤在推荐系统实现中面临的两个问题,它们的共同点是均考虑到了最近邻居的形成问题(包括用户信息获得的充分性、计算耗费等)。但是应该看到协同过滤在推荐系统的实现中,要获得最近邻居用户,必须通过一定的计算获得用户之间的相似度,然后确定最佳的邻居个数,形成邻居用户集。而在这一过程中,如果对全部数据集进行相似性计算,虽然直接,但是运算量和时间花费都极大,无法适应真实的商务系统。如果通过对训练集数据(整个数据集的某一子集)进行实验获得,虽然不必对整个数据集进行计算,但是必须通过将多次实验结果统计出来才可能得到,这无疑也增加了推荐结果获得的代价和误差。并且如果考虑到数据集的动态变化,这一形成最近邻居用户集技术的实际应用价值越来越小。因此,考虑使用更为有效的最近邻居用户形成办法,对于协同过滤的应用非常必要。

Ⅵ 协同过滤,基于内容推荐有什么区别

举个简单的小例子,我们已知道
用户u1喜欢的电影是A,B,C
用户u2喜欢的电影是A, C, E, F
用户u3喜欢的电影是B,D
我们需要解决的问题是:决定对u1是不是应该推荐F这部电影
基于内容的做法:要分析F的特征和u1所喜欢的A、B、C的特征,需要知道的信息是A(战争片),B(战争片),C(剧情片),如果F(战争片),那么F很大程度上可以推荐给u1,这是基于内容的做法,你需要对item进行特征建立和建模。
协同过滤的办法:那么你完全可以忽略item的建模,因为这种办法的决策是依赖user和item之间的关系,也就是这里的用户和电影之间的关系。我们不再需要知道ABCF哪些是战争片,哪些是剧情片,我们只需要知道用户u1和u2按照item向量表示,他们的相似度比较高,那么我们可以把u2所喜欢的F这部影片推荐给u1。
根据数据源的不同推荐引擎可以分为三类
1、基于人口的统计学推荐(Demographic-based Recommendation)
2、基于内容的推荐(Content-based Recommendation)
3、基于协同过滤的推荐(Collaborative Filtering-based Recommendation)
基于内容的推荐:
根据物品或内容的元数据,发现物品或内容的相关性,然后基于用户以前的喜好记录推荐给用户相似的物品
基于内容推荐的一个典型的例子,电影推荐系统,首先我们需要对电影的元数据有一个建模,这里只简单的描述了一下电影的类型;然后通过电影的元数据发现电影间的相似度,因为类型都是“爱情,浪漫”电影 A 和 C 被认为是相似的电影(当然,只根据类型是不够的,要得到更好的推荐,我们还可以考虑电影的导演,演员等等);最后实现推荐,对于用户 A,他喜欢看电影 A,那么系统就可以给他推荐类似的电影 C。

Ⅶ 利用 SVD 实现协同过滤推荐算法

奇异值分解(Singular Value Decomposition,以下简称SVD)
是在机器学习领域广泛应用的算法,它不光可以用于 降维算法中的特征分解 ,还可以用于 推荐系统 ,以及自然语言处理等领域。

优点: 简化数据,去除噪声,提高算法的结果。
缺点: 数据的转换可能难以理解。

应用领域: 推荐引擎(协同过滤、相似度计算)、图像压缩等。

SVD定义: 如果我们求出了矩阵A的n个特征值λ1≤λ2≤...≤λn,以及这n个特征值所对应的特征向量{w1,w2,...wn},如果这n个特征向量线性无关,那么矩阵A就可以用下式的特征分解表示:A=WΣW−1,其中W是这n个特征向量所张成的n×n维矩阵,而Σ为这n个特征值为主对角线的n×n维矩阵。一般我们会把W的这n个特征向量标准化,即满足||wi||2=1, 或者wiTwi=1,此时W的n个特征向量为标准正交基,满WTW=I,即WT=W−1, 也就是说W为酉矩阵。要进行特征分解,矩阵A必须为方阵。那么如果A不是方阵,则用到SVD。

矩阵A的SVD为:A=UΣVT,其中U是一个m×m的矩阵,Σ是一个m×n的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,V是一个n×n的矩阵。U和V都是酉矩阵,即满足UTU=I,VTV=I。

对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。

因此SVD 也是一种强大的降维工具 ,可以利用 SVD 来逼近矩阵并从中获得主要的特征。通过保留矩阵的 80%~90% 的能量,就可以得到重用的特征并去除噪声。

推荐系统 是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。
主要有以下几种推荐算法:
基于内容的推荐(用到自然语言处理), 协同过滤(主流) ,基于规则推荐(基于最多用户点击,最多用户浏览等),混合推荐(类似集成算法,投票决定),基于人口统计信息的推荐(根据用户基本信息)

协同过滤推荐分为三种类型。 第一种是基于用户(user-based)的协同过滤(需要在线找用户和用户之间的相似度关系),第二种是基于项目(item-based)的协同过滤(基于项目的协同过滤可以离线找物品和物品之间的相似度关系), 第三种是基于模型(model based)的协同过滤(用户和物品,主流)。

一般在推荐系统中,数据往往是使用 用户-物品 矩阵来表示的。 用户对其接触过的物品进行评分,评分表示了用户对于物品的喜爱程度,分数越高,表示用户越喜欢这个物品。而这个矩阵往往是稀疏的,空白项是用户还未接触到的物品,推荐系统的任务则是选择其中的部分物品推荐给用户。

对于这个 用户-物品 矩阵,用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

具体基于模型的方法有:
用关联算法做协同过滤(Apriori算法、FP Tree算法)
用聚类算法做协同过滤(针对基于用户或者基于模型,Kmeans,DBSCAN)
用分类算法做协同过滤(设定评分阈值,高于推荐,低于不推荐,逻辑回归和朴素贝叶斯,解释性很强)
用回归算法做协同过滤(Ridge回归,回归树)
用矩阵分解做协同过滤(由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而用户物品评分矩阵是一个典型的稀疏矩阵,主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是不再要求将矩阵分解为UΣVT的形式,而变是两个低秩矩阵PTQ的乘积形式。)
用神经网络做协同过滤(限制玻尔兹曼机RBM)

在 Python 的 numpy 中,linalg已经实现了SVD

Ⅷ 协同过滤(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,在超图神经网络上并没多大的改进,重点仍然在于如何用这种结构去解决存在的问题。

如果觉得有用,欢迎点赞关注赞赏,若对推荐感兴趣欢迎评论区/私信交流~~~

阅读全文

与python实现协同过滤相关的资料

热点内容
花园废水利用 浏览:143
如何用喝完的可乐瓶子做净水器 浏览:212
超滤的进水悬浮物浓度多少 浏览:299
一壶水加多少除垢剂 浏览:839
名爵汽车净水怎么擦干 浏览:416
果酒生产废水处理 浏览:347
江门小区污水处理多少钱 浏览:776
德龙除垢剂替代 浏览:777
反渗透膜制纯水 浏览:284
河南反渗透净水设备 浏览:463
建设局和污水厂什么联系 浏览:384
五指山污水处理厂在哪里 浏览:861
600ro膜有多少废水比 浏览:323
家用净水器需要安装多少滤芯 浏览:689
水蒸气蒸馏法是不是和胡萝卜素的提取 浏览:745
纸箱厂废水含什么 浏览:59
双杉家用净水器怎么样 浏览:755
先路水处理 浏览:319
树脂假山流水摆件 浏览:658
红外测油仪如何测工业废水 浏览:327