導航:首頁 > 凈水問答 > 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實現協同過濾相關的資料

熱點內容
俗稱管道超濾機6 瀏覽:566
西湖凈水是用什麼葯粉螺絲都沒了 瀏覽:649
反滲透芯子怎樣取出來 瀏覽:224
怎樣去除不銹鋼門的水垢 瀏覽:200
鮮花蒸餾的功效怎麼呀 瀏覽:835
水處理試運行記錄 瀏覽:617
反滲透設備除鐵嗎 瀏覽:100
污水提升泵缺點 瀏覽:206
新的超濾膜出水很多泡沫 瀏覽:338
edi整流器 瀏覽:470
半透膜電池 瀏覽:999
餘杭區撈污水池 瀏覽:233
沁園飲水機怎麼接線 瀏覽:566
緩蝕阻垢劑可以除垢嗎 瀏覽:385
污水處理的數學模型的構建 瀏覽:249
混凝土污水處理池施工 瀏覽:618
北京高鹽廢水費用多少 瀏覽:710
飲水機保溫表怎麼設置 瀏覽:643
凈水器種草視頻怎麼拍 瀏覽:875
飲水機一年不用了怎麼辦 瀏覽:597