导航:首页 > 编程语言 > 协同过滤推荐算法代码

协同过滤推荐算法代码

发布时间:2024-04-04 19:34:38

『壹』 鍒╃敤 SVD 瀹炵幇鍗忓悓杩囨护鎺ㄨ崘绠楁硶

濂囧紓鍊煎垎瑙(Singular Value Decomposition锛屼互涓嬬畝绉癝VD)
鏄鍦ㄦ満鍣ㄥ︿範棰嗗煙骞挎硾搴旂敤鐨勭畻娉曪紝瀹冧笉鍏夊彲浠ョ敤浜 闄嶇淮绠楁硶涓鐨勭壒寰佸垎瑙 锛岃繕鍙浠ョ敤浜 鎺ㄨ崘绯荤粺 锛屼互鍙婅嚜鐒惰瑷澶勭悊绛夐嗗煙銆

浼樼偣锛 绠鍖栨暟鎹锛屽幓闄ゅ櫔澹帮紝鎻愰珮绠楁硶鐨勭粨鏋溿
缂虹偣锛 鏁版嵁鐨勮浆鎹㈠彲鑳介毦浠ョ悊瑙c

搴旂敤棰嗗煙锛 鎺ㄨ崘寮曟搸锛堝崗鍚岃繃婊ゃ佺浉浼煎害璁$畻锛夈佸浘鍍忓帇缂╃瓑銆

SVD瀹氫箟锛 濡傛灉鎴戜滑姹傚嚭浜嗙煩闃礎鐨刵涓鐗瑰緛鍊嘉1鈮の2鈮...鈮の籲锛屼互鍙婅繖n涓鐗瑰緛鍊兼墍瀵瑰簲鐨勭壒寰佸悜閲弡w1,w2,...wn}锛屽傛灉杩檔涓鐗瑰緛鍚戦噺绾挎ф棤鍏筹紝閭d箞鐭╅樀A灏卞彲浠ョ敤涓嬪紡鐨勭壒寰佸垎瑙h〃绀猴細A=W危W−1锛屽叾涓璚鏄杩檔涓鐗瑰緛鍚戦噺鎵寮犳垚鐨刵脳n缁寸煩闃碉紝鑰屛d负杩檔涓鐗瑰緛鍊间负涓诲硅掔嚎鐨刵脳n缁寸煩闃点備竴鑸鎴戜滑浼氭妸W鐨勮繖n涓鐗瑰緛鍚戦噺鏍囧噯鍖栵紝鍗虫弧瓒硘|wi||2=1, 鎴栬厀iTwi=1锛屾ゆ椂W鐨刵涓鐗瑰緛鍚戦噺涓烘爣鍑嗘d氦鍩猴紝婊WTW=I锛屽嵆WT=W−1, 涔熷氨鏄璇碬涓洪厜鐭╅樀銆傝佽繘琛岀壒寰佸垎瑙o紝鐭╅樀A蹇呴』涓烘柟闃点傞偅涔堝傛灉A涓嶆槸鏂归樀锛屽垯鐢ㄥ埌SVD銆

鐭╅樀A鐨凷VD涓猴細A=U危VT锛屽叾涓璘鏄涓涓猰脳m鐨勭煩闃碉紝危鏄涓涓猰脳n鐨勭煩闃碉紝闄や簡涓诲硅掔嚎涓婄殑鍏冪礌浠ュ栧叏涓0锛屼富瀵硅掔嚎涓婄殑姣忎釜鍏冪礌閮界О涓哄囧紓鍊硷紝V鏄涓涓猲脳n鐨勭煩闃点俇鍜孷閮芥槸閰夌煩闃碉紝鍗虫弧瓒砋TU=I,VTV=I銆

瀵逛簬濂囧紓鍊,瀹冭窡鎴戜滑鐗瑰緛鍒嗚В涓鐨勭壒寰佸肩被浼硷紝鍦ㄥ囧紓鍊肩煩闃典腑涔熸槸鎸夌収浠庡ぇ鍒板皬鎺掑垪锛岃屼笖濂囧紓鍊肩殑鍑忓皯鐗瑰埆鐨勫揩锛屽湪寰堝氭儏鍐典笅锛屽墠10%鐢氳嚦1%鐨勫囧紓鍊肩殑鍜屽氨鍗犱簡鍏ㄩ儴鐨勫囧紓鍊间箣鍜岀殑99%浠ヤ笂鐨勬瘮渚嬨備篃灏辨槸璇达紝鎴戜滑涔熷彲浠ョ敤鏈澶х殑k涓鐨勫囧紓鍊煎拰瀵瑰簲鐨勫乏鍙冲囧紓鍚戦噺鏉ヨ繎浼兼弿杩扮煩闃点

鍥犳SVD 涔熸槸涓绉嶅己澶х殑闄嶇淮宸ュ叿 锛屽彲浠ュ埄鐢 SVD 鏉ラ艰繎鐭╅樀骞朵粠涓鑾峰緱涓昏佺殑鐗瑰緛銆傞氳繃淇濈暀鐭╅樀鐨 80%~90% 鐨勮兘閲忥紝灏卞彲浠ュ緱鍒伴噸鐢ㄧ殑鐗瑰緛骞跺幓闄ゅ櫔澹般

鎺ㄨ崘绯荤粺 鏄鍒╃敤鐢靛瓙鍟嗗姟缃戠珯鍚戝㈡埛鎻愪緵鍟嗗搧淇℃伅鍜屽缓璁锛屽府鍔╃敤鎴峰喅瀹氬簲璇ヨ喘涔颁粈涔堜骇鍝侊紝妯℃嫙閿鍞浜哄憳甯鍔╁㈡埛瀹屾垚璐涔拌繃绋嬨
涓昏佹湁浠ヤ笅鍑犵嶆帹鑽愮畻娉曪細
鍩轰簬鍐呭圭殑鎺ㄨ崘锛堢敤鍒拌嚜鐒惰瑷澶勭悊锛夛紝 鍗忓悓杩囨护锛堜富娴侊級 锛屽熀浜庤勫垯鎺ㄨ崘锛堝熀浜庢渶澶氱敤鎴风偣鍑伙紝鏈澶氱敤鎴锋祻瑙堢瓑锛夛紝娣峰悎鎺ㄨ崘锛堢被浼奸泦鎴愮畻娉曪紝鎶曠エ鍐冲畾锛夛紝鍩轰簬浜哄彛缁熻′俊鎭鐨勬帹鑽愶紙鏍规嵁鐢ㄦ埛鍩烘湰淇℃伅锛

鍗忓悓杩囨护鎺ㄨ崘鍒嗕负涓夌嶇被鍨嬨 绗涓绉嶆槸鍩轰簬鐢ㄦ埛(user-based)鐨勫崗鍚岃繃婊わ紙闇瑕佸湪绾挎壘鐢ㄦ埛鍜岀敤鎴蜂箣闂寸殑鐩镐技搴﹀叧绯伙級锛岀浜岀嶆槸鍩轰簬椤圭洰(item-based)鐨勫崗鍚岃繃婊わ紙鍩轰簬椤圭洰鐨勫崗鍚岃繃婊ゅ彲浠ョ荤嚎鎵剧墿鍝佸拰鐗╁搧涔嬮棿鐨勭浉浼煎害鍏崇郴锛夛紝 绗涓夌嶆槸鍩轰簬妯″瀷(model based)鐨勫崗鍚岃繃婊わ紙鐢ㄦ埛鍜岀墿鍝侊紝涓绘祦锛夈

涓鑸鍦ㄦ帹鑽愮郴缁熶腑锛屾暟鎹寰寰鏄浣跨敤 鐢ㄦ埛-鐗╁搧 鐭╅樀鏉ヨ〃绀虹殑銆 鐢ㄦ埛瀵瑰叾鎺ヨЕ杩囩殑鐗╁搧杩涜岃瘎鍒嗭紝璇勫垎琛ㄧず浜嗙敤鎴峰逛簬鐗╁搧鐨勫枩鐖辩▼搴︼紝鍒嗘暟瓒婇珮锛岃〃绀虹敤鎴疯秺鍠滄㈣繖涓鐗╁搧銆傝岃繖涓鐭╅樀寰寰鏄绋鐤忕殑锛岀┖鐧介」鏄鐢ㄦ埛杩樻湭鎺ヨЕ鍒扮殑鐗╁搧锛屾帹鑽愮郴缁熺殑浠诲姟鍒欐槸閫夋嫨鍏朵腑鐨勯儴鍒嗙墿鍝佹帹鑽愮粰鐢ㄦ埛銆

瀵逛簬杩欎釜 鐢ㄦ埛-鐗╁搧 鐭╅樀锛岀敤宸叉湁鐨勯儴鍒嗙█鐤忔暟鎹鏉ラ勬祴閭d簺绌虹櫧鐨勭墿鍝佸拰鏁版嵁涔嬮棿鐨勮瘎鍒嗗叧绯伙紝鎵惧埌鏈楂樿瘎鍒嗙殑鐗╁搧鎺ㄨ崘缁欑敤鎴枫

鍏蜂綋鍩轰簬妯″瀷鐨勬柟娉曟湁锛
鐢ㄥ叧鑱旂畻娉曞仛鍗忓悓杩囨护锛圓priori绠楁硶銆丗P Tree绠楁硶锛
鐢ㄨ仛绫荤畻娉曞仛鍗忓悓杩囨护锛堥拡瀵瑰熀浜庣敤鎴锋垨鑰呭熀浜庢ā鍨嬶紝Kmeans锛孌BSCAN锛
鐢ㄥ垎绫荤畻娉曞仛鍗忓悓杩囨护锛堣惧畾璇勫垎闃堝硷紝楂樹簬鎺ㄨ崘锛屼綆浜庝笉鎺ㄨ崘锛岄昏緫鍥炲綊鍜屾湸绱犺礉鍙舵柉锛岃В閲婃у緢寮猴級
鐢ㄥ洖褰掔畻娉曞仛鍗忓悓杩囨护锛圧idge鍥炲綊锛屽洖褰掓爲锛
鐢ㄧ煩闃靛垎瑙e仛鍗忓悓杩囨护锛堢敱浜庝紶缁熺殑濂囧紓鍊煎垎瑙SVD瑕佹眰鐭╅樀涓嶈兘鏈夌己澶辨暟鎹锛屽繀椤绘槸绋犲瘑鐨勶紝鑰岀敤鎴风墿鍝佽瘎鍒嗙煩闃垫槸涓涓鍏稿瀷鐨勭█鐤忕煩闃碉紝涓昏佹槸SVD鐨勪竴浜涘彉绉嶏紝姣斿侳unkSVD锛孊iasSVD鍜孲VD++銆傝繖浜涚畻娉曞拰浼犵粺SVD鐨勬渶澶у尯鍒鏄涓嶅啀瑕佹眰灏嗙煩闃靛垎瑙d负U危VT鐨勫舰寮忥紝鑰屽彉鏄涓や釜浣庣З鐭╅樀PTQ鐨勪箻绉褰㈠紡銆傦級
鐢ㄧ炵粡缃戠粶鍋氬崗鍚岃繃婊わ紙闄愬埗鐜诲皵鍏规浖鏈篟BM锛

鍦 Python 鐨 numpy 涓锛宭inalg宸茬粡瀹炵幇浜哠VD

『贰』 协同过滤算法

用户行为数据在网站上最简单的存在形式就是日志,比如用户在电子商务网站中的网页浏览、购买、点击、评分和评论等活动。 用户行为在个性化推荐系统中一般分两种——显性反馈行为(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需要维护一个物品 相似度矩阵。从存储的角度说,如果用户很多,那么维护用户兴趣相似度矩阵需要很大的空间, 同理,如果物品很多,那么维护物品相似度矩阵代价较大

下表是对二者的一个全面的表较:

阅读全文

与协同过滤推荐算法代码相关的资料

热点内容
win10任务态栏win7 浏览:79
三星9280可以用安卓70 浏览:986
淘宝客推广获取代码 浏览:1
什么情况对企业网站约谈 浏览:600
qq怎么撤回好友的消息吗 浏览:802
外汇高频数据哪个好 浏览:61
热血江湖110120升级 浏览:423
word如何给文章分段 浏览:196
app的系统通知哪里关 浏览:752
javarandom数组长度 浏览:920
怎么看数据库的url 浏览:162
excel调用文件名后5个字 浏览:228
一般公司产品销售在什么网站 浏览:333
linuxinit进程 浏览:467
苹果6plus外置镜头 浏览:125
win10可以玩星际1吗 浏览:252
泸州购物网站起名什么名字寓意好 浏览:948
初级程序员要学会什么 浏览:434
无损音乐如何导入iphone 浏览:944
苹果11的文件怎么编辑 浏览:451

友情链接